2

imagecreatefromjpeg() 関数を使用して、アップロード フォーム経由で画像をアップロードしています。

$folder = '../images/';
$image = imagecreatefromjpeg($_FILES['image']['tmp_name']);
$new = imagecreatetruecolor(300, 300);
imagecopyresampled($new, $image, 0, 0, 0, 0, 300, 300, 150, 150);
imagejpeg($new, $folder, 100);

ほとんどの写真は正常にアップロードされますが、次のエラーが表示されるものもあります。

警告: imagecreatefromjpeg() [function.imagecreatefromjpeg]: gd-jpeg、libjpeg: 回復可能なエラー: 破損した JPEG データ: マーカー 0xed の前に 756 余分なバイト

すべてではありませんが、一部の「.jpeg」ファイルで発生するようです。「.jpg」ファイルで問題が発生するのを見たことはありませんが、問題が「.jpeg」ファイルに限定されているかどうかはわかりません。問題のファイルの拡張子を「.jpeg」から「.jpg」に変更すると、問題なく動作することに気付きました。

PHP で imagecreatefromjpeg() 関数を使用すると、「破損した JPEG データ」というメッセージが表示されるのはなぜですか?

4

3 に答える 3

9

問題のファイルの拡張子を「.jpeg」から「.jpg」に変更すると、問題なく動作することに気付きました。

名前を変更しただけですか、それともグラフィカルプログラムで再保存しましたか?

とにかく、ファイルが壊れているようです。Bug #39918 imagecreatefromjpeg does not workを見てください。

GD は壊れた jpeg 画像に対してより寛容なメカニズムを提供します。

error_reporting(E_ALL) の使用; 開発中に何が起こっているかを教えてくれます。GD は jpeg コーデックでいくつかのエラーを報告しました。この画像のように、一部の jpeg エラーは回復可能です。

gd.jpeg_ignore_warning を使用して jpeg コーデックの動作を変更できます。

ini_set("gd.jpeg_ignore_warning", 1);

$im = imagecreatefromjpeg("test.jpeg");

$im に画像が含まれるようになりました。

于 2013-04-04T04:32:35.343 に答える
-1

これは以下で解決できます: ini_set ('gd.jpeg_ignore_warning', 1);

于 2013-10-13T15:26:54.367 に答える