5

在调整某些图像的大小时,我收到了这个 JPEG 文件过早结束的错误。有趣和奇怪的部分是,只有当我上传任何相机拍摄的图像时,我才会收到这个错误,比如从手机上,除了那些一切都很好。我认为这可能是因为 plupload 中使用的块大小。所以,我上传了更大尺寸的图像到有点像 3mb 来测试。适用于相机拍摄的图像以外的图像。所以,每当我上传相机照片时,我都会收到此错误。

对错误的进一步说明:php 函数 imagecreatefromjpeg 抛出错误“imgname.jpg 不是有效的 JPEG 文件”。

要调整图像大小,我正在使用 Codeigniter 的图像操作类。

4

4 回答 4

3

根据你提供的情况,我只能给你我的扣除。

相机图像通常非常大。我建议您尝试调整相机图像的大小,看看它是否有效。

你的 PHP 版本是什么?有一个与此相关的错误:https ://bugs.php.net/bug.php?id=29878

另请检查您的 JPEG 文件是否为 RGB 格式。手册中的某处提到它无法为某些版本的 GD 库正确加载 CMYK。

您愿意使用其他课程吗?我使用这个类来调整图像大小并且多年来没有遇到任何问题。

调整图像大小很简单:

<?php
   include('SimpleImage.php');
   $image = new SimpleImage();
   $image->load('picture.jpg');
   $image->resizeToHeight(500);
   $image->save('picture2.jpg');
   $image->resizeToHeight(200);
   $image->save('picture3.jpg');
?>

如果所有建议都没有奏效,您可以尝试使用ImageMagick

于 2012-09-15T16:06:22.317 回答
3

如果图像内容不完整,“JPEG 文件过早结束”也是一般软件错误。软件通过最后一个像素的颜色来确定它。

我从 tesseract(开源 OCR 引擎)得到“JPEG 文件过早结束”,因为文件没有通过网络正确复制。

于 2014-05-04T09:06:47.180 回答
3

您是否发现有时它会在 imagecreatefromjpeg() 在错误的 JPEG 上运行时挂起 php。我发现这是因为你使用的 JPEG 文件没有 EOI(图像结尾)FF D9 在你的 JPEG 结尾

JPEG 图像应以 0xFFD8 开头并以 0xFFD9 结尾

// this may help to fix the error
function check_jpeg($f, $fix=false )
{

    # check for jpeg file header and footer - also try to fix it
    if ( false !== (@$fd = fopen($f, 'r+b' )) ){
        if ( fread($fd,2)==chr(255).chr(216) ){
            fseek ( $fd, -2, SEEK_END );
            if ( fread($fd,2)==chr(255).chr(217) ){
                fclose($fd);
                return true;
            }else{
            if ( $fix && fwrite($fd,chr(255).chr(217)) ){return true;}
                fclose($fd);
                return false;
            }
        }else{fclose($fd); return false;}
    }else{
        return false;
    }
}
于 2016-03-04T03:18:51.720 回答
2

您可以设置默认值 gd.jpeg_ignore_warning=1inphp.ini

或者

ini_set('gd.jpeg_ignore_warning', true);您可以在调用之前在您的 PHP 脚本中 这样设置它imagecreatefromjpeg()

在实现上述任何一项后,GD 库将忽略它曾经失败的错误并 imagecreatefromjpeg() 返回一个image resource identifier.

注意:在PHP 7.1.0默认值gd.jpeg_ignore_warning已从 更改01

参考

于 2017-02-04T16:58:29.247 回答