2012-04-29 11 views
2

jpegファイルがあり、特定の色にピクセルを設定したいとします。 jpegを保存すると、色が失われています.100に設定しても、新しいピクセルの周りにエイリアシングが発生します。これは損失の多い形式ですが、再圧縮する必要はありません。少数のピクセル。PHP GD再圧縮なしでJPEGを編集

// Create the GD resource 
$img = imagecreatefromjpeg($filename); 

// Set the first pixel to red 
$color = imagecolorallocate($img, 255, 0, 0); 
imagesetpixel($img, 0, 0, $color); 

// Save the jpeg - is this where I'm wrong? I see the red pixel but it's the wrong color and is blurred. 
imagejpeg($img, 'foo.jpg', 100); 

// Lossless format works fine, red pixel is bright and accurate. 
imagepng($img, 'foo.png'); 

多分GDはここに行く方法ではありませんか?私はいくつかのピクセルの色を変更する必要があり、保存すると正確である必要があります。 GIF、PNG、またはJPEG2000に依存せずにこれを行う方法はありますか?

+0

ImageMagickを試してみてください...より柔軟です(ここのコメントに基づいています:http://stackoverflow.com/questions/6561345/gd-imagejpeg-compression) – Aziz

答えて

4

あなた自身が言ったように、JPEGはロッシーな形式です。実際には「ピクセル」は直接格納されません。画像に変更を加えると、画像を再圧縮する必要があります。これを回避する方法はありません。

赤いピクセルが「間違った色」と「ぼやけた」理由は、JPEG圧縮の仕組みのためです。ここでもピクセルは保存されません。明るさの変化に重点を置き、実際の色情報はそれほど重要ではありません。

私は肯定的ではありませんが、変更の影響を受けるいくつかのブロックのみを再圧縮することができます。標準的な関数ではこれを行うことができず、自分自身でフォーマットと圧縮方式を掘り下げなければなりません。

+1

しかし、圧縮エンジンに私が追加した色を少なくとも維持してください。 500pxのJPEGを100%でPhotoshopに保存すると、2MBのデータがそこに保存され、すべてのピクセルが配置されます。 GDはこれをしないのですか? ImageMagickはどうですか? – Maverick

+0

PhotoshopとGDは同じJPEG圧縮を使用しません。 Photoshopは、私の経験上、GDよりはるかに優れた画像圧縮が可能です。品質を100に設定した場合は、すべての作業を完了しています。ピクセル完全な結果が実際に必要な場合はPNGを使用します。 – Brad

+0

バマー。ありがとう。 – Maverick

関連する問題