JPEG文件过早结束

时间:2012-09-15 15:52:22

标签: php codeigniter image-processing image-resizing plupload

我在调整某些图像大小时遇到​​了JPEG文件错误的过早结束。有趣和奇怪的部分是,我只是在上传任何相机拍摄的图像时才会收到此错误,例如来自移动设备,除了那些每件事情都很棒。我认为这可能是因为plupload中使用的块大小。所以,我上传了更大尺寸的图像,有点像3mb测试。与相机拍摄图像以外的图像一起使用。因此,每当我上传相机照片时,我都会收到此错误。

关于错误的进一步阐述:php函数imagecreatefromjpeg抛出一个错误“imgname.jpg不是一个有效的JPEG文件”。

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

4 个答案:

答案 0 :(得分:2)

根据您提供的内容,我只能给您扣除。

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

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

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

您是否愿意使用其他课程?我使用this class来调整图像大小,并且多年来没有遇到任何问题。

调整图像大小非常简单:

<?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

答案 1 :(得分:2)

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

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;
    }
}

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

您可以在gd.jpeg_ignore_warning=1

中设置php.ini的默认值

OR

在调用ini_set('gd.jpeg_ignore_warning', true);

之前,您可以在PHP脚本中将其设置为此imagecreatefromjpeg()

执行上述任何一项后,GD库将忽略用于失败的错误,imagecreatefromjpeg()将返回image resource identifier

注意:在PHP 7.1.0中,gd.jpeg_ignore_warning的默认值已从0更改为1

<强> Reference