当前位置: 首页 > 知识库问答 >
问题:

为所有mysql post img附件创建拇指失败

胥诚
2023-03-14

我正在尝试保存我网站中所有附加图像的副本。

加载时间太长,所以我认为生成要在列表页面中显示的缩略图不是个坏主意,

这就是我尝试的方式:

 <?php
    include('basedatos.php');
    class ImgResizer {
        var $originalFile = '$newName';
        function ImgResizer($originalFile = '$newName') {
            $this -> originalFile = $originalFile;
        }
        function resize($newWidth, $targetFile) {

            if (empty($newWidth) || empty($targetFile)) {
                return false;
            }
            $src = imagecreatefromjpeg($this -> originalFile);
            list($width, $height) = getimagesize($this -> originalFile);
            $newHeight = ($height / $width) * $newWidth;
            $tmp = imagecreatetruecolor($newWidth, $newHeight);
            imagecopyresampled($tmp, $src, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
            if (exif_imagetype($tmp) != IMAGETYPE_JPEG) {
                imagecreatefromjpeg($tmp, $targetFile, 95);
            }else if(exif_imagetype($tmp) != IMAGETYPE_PNG){
                imagecreatefrompng($tmp, $targetFile, 95);
            }else if(exif_imagetype($tmp) != IMAGETYPE_GIF){
                imagecreatefromgif($tmp, $targetFile, 95);
            }else die('invalid image format');

        }

    }
    $query = "SELECT * FROM media where iframe <> 1";
    $mediafiles = mysql_query($query);
    while($details = mysql_fetch_array($mediafiles))
    {   // Copy each file from its temp directory to $ROOT

        $temp = '/home/deia1/public_html/'.$details['url'];
        $path = '/home/deia1/public_html/files/uploads/thumbs/'.str_replace('files/uploads/','',$details['url']);

        echo "$temp<br>";
        if(is_dir('/home/deia1/public_html/files/uploads/thumbs/')){
            echo "$path<br>";

                $work = new ImgResizer($temp);
                $work -> resize(300, $path);

        }
    }
         ?>

注意我有两个echo在那里,

这就是他们记录的内容(对于第一项,其余的错误看起来几乎相同):

/home/deia1/public_html/files/uploads/Detalle Magrana。jpg

/home/deia1/public_html/files/uploads/thumbs/Detalle Magrana。jpg

警告:在/home/deia1/public\u html/includes/thumbs中,imagecreatefrompng()的参数计数错误。php第21行/home/deia1/public_html/files/uploads/video。png/home/deia1/public_html/files/uploads/thumbs/video。巴布亚新几内亚

警告:imagecreatefromjpeg()[function.imagecreatefromjpeg]:gd jpeg:jpeg库报告不可恢复的错误:in/home/deia1/public_html/includes/thumbs。第13行的php

警告:imagecreatefromjpeg()[function.imagecreatefromjpeg]:'/home/deia1/public_html/files/uploads/video。png'在/home/deia1/public_html/includes/thumbs中不是有效的JPEG文件。第13行的php

知道我做错了什么吗?

-编辑-

我需要在 /thumbs/路径中保存图像的调整大小副本,我不想调整原始图像的大小。

-EDIT2-

这是@Bass Jobsen为PNG文件建议的当前代码中的错误,它们生成白色图像。对于jpg来说,这似乎非常有效:

Warning: imagepng() [function.imagepng]: gd-png: fatal libpng error: zlib failed to initialize compressor -- stream error in /home/deia1/public_html/includes/thumbs.php on line 60

Warning: imagepng() [function.imagepng]: gd-png error: setjmp returns error condition in /home/deia1/public_html/includes/thumbs.php on line 60

共有1个答案

蒋弘致
2023-03-14

根据代码重写类:

    class ImgResizer {
        var $originalFile = '$newName';
        function ImgResizer($originalFile = '$newName') {
            $this -> originalFile = $originalFile;
        }
        function resize($newWidth, $targetFile,$quality=90) {

            if (empty($newWidth) || empty($targetFile)) {
                return false;
            }


            if (($imgtype = exif_imagetype($this -> originalFile)) === IMAGETYPE_JPEG) {
                $src = imagecreatefromjpeg($this -> originalFile);
            }else if(($imgtype = exif_imagetype($this -> originalFile)) === IMAGETYPE_PNG){
                $src = imagecreatefrompng($this -> originalFile);
            }else if(($imgtype = exif_imagetype($this -> originalFile)) != IMAGETYPE_GIF){
                $src = imagecreatefromgif($this -> originalFile);
            }else die('invalid image format');


            list($width, $height) = getimagesize($this -> originalFile);
            $newHeight = ($height / $width) * $newWidth;
            $tmp = imagecreatetruecolor($newWidth, $newHeight);
            imagecopyresampled($tmp, $src, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
            imagedestroy($src);


            if ($imgtype === IMAGETYPE_JPEG) {
                imagejpeg($tmp, $targetFile, $quality);
            }else if($imgtype === IMAGETYPE_PNG){
                //see: http://stackoverflow.com/a/7878801/1596547

                imagepng($tmp, $targetFile, (int)$quality*9/100);

            }else if($imgtype === IMAGETYPE_GIF){
                imagegif($tmp, $targetFile);
            }
            imagedestroy($tmp);

        }

    }


$work = new ImgResizer('./testdrive/bootstrap-150x150.png');
$work -> resize(30, './thumb.png');
 类似资料:
  • 我可以运行我的项目,并且没有错误地运行它。但当我运行测试时,它不能。 我看到文档,一步一步地。 我不知道我在哪里犯了错误。 配置: 测试文件 错误消息:

  • 对CDK来说是新的,对AWS来说是相对新的 我正在遵循本教程,其中包括创建一个基于fargate的私有API,并通过公开的ec2实例在公共互联网上访问它。 我正在挑选,最小限度地纠正各种问题,让一切都运转起来。现在是时候用: 整个教程的所有代码都可以在这个github链接中找到

  • 我正在使用以下类创建一个垂直搜索栏 然后在活动中使用 问题是我如何设置拇指按下和集中从代码绘图?

  • 问题内容: 我使用以下代码在一个Android单元的sdcard上创建一个文件夹“ mymir”​​和一个文件“ .nomedia”(在mymir文件夹中)。但是,它以某种方式失败了,只是不存在“ .nomedia”文件文件夹。这是代码: 问题答案: 我真的在那里SD吗? 如果定位到1.6+,您是否已声明 ? 确切的异常可能会有所帮助。

  • 问题内容: 我创建了一个类似.ini的文件,其中包含稍后在程序中需要的所有值,请参见下文: 我想将所有这些项目读入一个类,并使其可从我的python项目的其他部分访问。到目前为止,我的代码如下: 我是python的新手,但是我的代码仍然可以看到很多问题: 我被迫在班级文件中为每个项目添加一个属性。并始终保持配置文件和我的班级同步。 此类不是单例,因此无论从何处导入都将进行读取/解析! 如果在我的课

  • 我设置了滑块的最小值和最大值(例如从1..100开始)。但我有另一个控件,它限制滑块的值范围,比如说从30..60。现在用户应该无法将滑块拇指移动到30以下和60以上,但最小值和最大值仍然应该是1和100。

  • 在Android系统中,是否可能有一个开关,可以为拇指的选中和未选中状态设置不同的图像? 例如,当开关处于未选中状态时,我希望拇指使用image_1。png当开关处于选中状态时,我希望拇指使用image_2。png。 我使用以下指南将开关的拇指设置为图像,但该图像适用于选中和未选中状态,我希望两种状态都有一个单独的图像。 谢谢

  • 有些时候,你可能想在你的控制器之外新建一些类,但同时又希望 这些类还能访问 CodeIgniter 的资源。下面你会看到,这其实很简单。 get_instance() get_instance() 返回: Reference to your controller's instance 返回类型: CI_Controller 任何在你的控制器方法中初始化的类都可以简单的通过 get_instance