3

大家好,我有以下错误:

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

使用以下图片: 在此处输入图像描述

在此处输入图像描述

我正在使用以下代码:

imagecreatefromstring(base64_decode($str));

我发现这个错误只出现在大图像尺寸上。

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

我也尝试了以下代码:

@imagecreatefromstring(base64_decode($str));

成功了,但是图像搞砸了

在此处输入图像描述 在此处输入图像描述

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

4

3 回答 3

0

正如您在评论中提到的那样,您将 base64 发送到 mysql 表,并且如上所述,之前和之后的数据是 100% 相同的,排除了您的 mysql 字段不够大的可能性(尽管您可以检查当然)。

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

于 2013-11-14T20:28:47.980 回答
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>
于 2015-06-21T23:50:08.050 回答
0

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

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

于 2021-04-22T22:59:48.200 回答