大家好我有以下错误:
imagecreatefromstring():gd-jpeg,libjpeg:可恢复的错误: JPEG文件过早结束
使用以下图像:
我使用以下代码:
imagecreatefromstring(base64_decode($str));
我发现只有大图片尺寸才会显示此错误。
我试图将图像重新调整为1027 * 768并且效果很好,但我不想重新调整图像大小。
我也试过以下代码:
@imagecreatefromstring(base64_decode($str));
它奏效了,但图像搞砸了
有没有想法解决这个问题,谢谢。
答案 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 显然使用了比文件大小更多的内存。