imagecreatefromstring():gd-jpeg,libjpeg:可恢复错误:JPEG文件过早结束

时间:2013-08-14 01:45:01

标签: php image gd

大家好我有以下错误:

  

imagecreatefromstring():gd-jpeg,libjpeg:可恢复的错误:   JPEG文件过早结束

使用以下图像: enter image description here

enter image description here

我使用以下代码:

imagecreatefromstring(base64_decode($str));

我发现只有大图片尺寸才会显示此错误。

我试图将图像重新调整为1027 * 768并且效果很好,但我不想重新调整图像大小。

我也试过以下代码:

@imagecreatefromstring(base64_decode($str));

它奏效了,但图像搞砸了

enter image description here enter image description here

有没有想法解决这个问题,谢谢。

3 个答案:

答案 0 :(得分:0)

正如你在评论中提到的,你将base64发送到一个mysql表,如上所述,之前和之后的数据是100%相同的,排除了你的mysql字段不够大的可能性(虽然你可以检查以确定)。

由于你使用的是ob_start()和ob_get_contents(),它可能是输出缓冲区相关的问题(最大缓冲区大小/输出缓冲区处理程序等),所以我建议重写代码以使用(临时)输出文件首先在imagejpeg()中使用该设置检查结果

答案 1 :(得分:0)

当我尝试从用户输入的图像中获取数据时,我遇到了同样的问题。

问题是我将base64编码的字符串存储到输入字段中。 可能存在某种限制数据输入字段可以容纳的数量。

我使用 textarea 而不是输入字段,我的代码工作得很好!

试试这个:

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // Get data from textarea
    $data = $_POST['image'];
    $data = explode("base64,", $data);
    // Decode the string
    $data = base64_decode($data[1]);

    $im = imagecreatefromstring($data);
    if ($im !== false) {
        // Saves file
        imagejpeg($im, 'image.jpg');
        imagedestroy($im);
    }
    else {
        // Show errors
        echo 'An error occurred.'; 
    }
}
?>
<!doctype html>
<html>
<head>
    <title>Image</title>
    <meta charset="utf-8">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</head>
<body>

<img src="" id="image-preview" style="width: 400px;" alt="">

<form action="" method="post">
    <textarea name="image" id="image"></textarea>
    <input type="submit" value="Make Image">
</form>

<input id="uploadImage" type="file" name="myPhoto" onchange="PreviewImage();" />
<script type="text/javascript">
    // Get's the data from file field and shows it in img tag
    function PreviewImage() {
        var oFReader = new FileReader();
        oFReader.readAsDataURL(document.getElementById("uploadImage").files[0]);

        oFReader.onload = function(oFREvent) {
            document.getElementById("image-preview").src = oFREvent.target.result;
            $("textarea").text(oFREvent.target.result);
        };
    };
</script>
</body>
</html>

答案 2 :(得分:0)

我遇到了同样的问题,事实证明增加 memory_limit 的 php ini 设置解决了它。

memory_limit 设置为 32 MB,但当我将其增加到 500 MB 时,问题就消失了。这有点奇怪,因为我无法上传的文件只有 2 MB,但 imagecreatefromstring 显然使用了比文件大小更多的内存。