簡體   English   中英

imagecreatefromstring(): gd-jpeg, libjpeg: 可恢復錯誤: JPEG 文件過早結束

[英]imagecreatefromstring(): gd-jpeg, libjpeg: recoverable error: Premature end of JPEG file

大家好,我有以下錯誤:

imagecreatefromstring(): gd-jpeg, libjpeg: 可恢復錯誤: JPEG 文件過早結束

使用以下圖像: 在此處輸入圖片說明

在此處輸入圖片說明

我正在使用以下代碼:

imagecreatefromstring(base64_decode($str));

我發現此錯誤僅在大圖像尺寸時出現。

我曾嘗試將圖像大小重新調整為 1027*768 並且效果很好,但我不想重新調整圖像大小。

我也嘗試了以下代碼:

@imagecreatefromstring(base64_decode($str));

它有效,但圖像搞砸了

在此處輸入圖片說明在此處輸入圖片說明

有沒有解決這個問題的想法,謝謝。

正如您在評論中提到的,您將 base64 發送到 mysql 表,並且如前所述,前后的數據 100% 相同,排除了您的 mysql 字段不夠大的可能性(盡管您可以檢查當然)。

由於您使用的是 ob_start() 和 ob_get_contents(),這可能是與輸出緩沖區相關的問題(最大緩沖區大小/輸出緩沖區處理程序等),因此我建議重寫代碼以在 imagejpeg() 中使用(臨時)輸出文件) 首先並使用該設置檢查結果

當我嘗試從用戶輸入的圖像中獲取數據時遇到了同樣的問題。

問題是我將 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>

我遇到了同樣的問題,結果證明增加 memory_limit 的 php ini 設置解決了它。

memory_limit 設置為 32 MB,但是當我將其增加到 500 MB 時,問題就消失了。 這有點奇怪,因為我無法上傳的文件只有 2 MB,但 imagecreatefromstring 顯然使用了比文件大小更多的內存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM