0

PHPで画像を処理しているときに、奇妙な動作に気づきました。理由はわかりません。

jpeg画像を読み、そこから新しい画像を作成します。次に、新しい画像を読みます。ただし、色の値を表示すると、異なる結果が得られます。(ただし、画像は同じように見えます。)

これが私のコードです:

$img = imagecreatefromjpeg('test2.jpg');
imagejpeg($img, 'test100.jpg'); 
$new= imagecreatefromjpeg('test100.jpg');   
list($width,$height) = getimagesize('test100.jpg'); 

for($x=0; $x<$width; $x++){
    for($y=0; $y<$height; $y++){
        echo "At [$x][$y] --".imagecolorat($img,$x,$y)."--".imagecolorat($new,$x,$y)."<br>";
    }
}

次の出力が得られます。

At [0][0] --14732734--14667454
At [0][1] --14601148--14666941
At [0][2] --13810862--13810862
At [0][3] --14271156--14139570
At [0][4] --15717832--15652039
At [0][5] --14598838--14401972
At [0][6] --11440262--11309188

等々...

画像は似ていますが、値が変更される理由がわかりません。助けてください。ありがとうございました

4

2 に答える 2

0

保存時に値が指定されていない場合、test100.jpg に保存される画像の品質はデフォルトで 75% になります。次を使用して 100% の品質を保存します。

imagejpeg($img, 'test100.jpg', 100); 
于 2012-06-30T22:22:31.370 に答える
0

JPEG は非可逆圧縮の画像ファイル形式です。つまり、画像を保存するたびにデータが失われます。

ピクセルごとに異なるカラー値が表示されるということは、データ損失と何ら変わりはありません。開いて再保存する代わりに、ファイルシステム関数を使用して jpeg ファイルをコピーするだけです

$img = imagecreatefromjpeg('test2.jpg');
copy('test2.jpg', 'test100.jpg');          ## <-- copy image _file_
$new= imagecreatefromjpeg('test100.jpg'); 

その後、同じ結果が得られます。

At [0][0] --855561--855561
At [0][1] --855561--855561
At [0][2] --921353--921353
At [0][3] --987144--987144
At [0][4] --1052937--1052937
At [0][5] --1250570--1250570
At [0][6] --1579535--1579535
于 2012-06-30T22:20:28.783 に答える