2012-01-06 16 views
1

私はいくつかの画像処理を行っていましたが、PHPのGDとImagickは画像のサイズをピクセルの同じレベルに変更しないことが判明しました。 今の場合、256から256までの縮尺の画像が必要です* 256PHPで画像リサイズ

TESTの結果が一致することを確認するために、私は256 * 256の画像を使用し、それ自身のサイズにリサイズします。私が試みられてきたもの

Araxis merge comparison on original VS resized

imagecopyresized($new, $img, 0, 0, $x, 0, $width, $height, $w, $h); //256 , 256 

およびそれらの

$compression_type = imagick::COMPRESSION_NO; 
$images_ima = new Imagick($image_path); //$image_path = path to image... 
$images_ima->setImageCompression($compression_type); 
$images_ima->setImageCompressionQuality(100); 
$images_ima->sampleImage($X_SIZE,$Y_SIZE); // 256 ,256 
$images_ima->writeImages($dest_path, true); //destination path 

なしには、私は元の画像との出力を比較する場合、それは次のようになりますが、働いていました

両方の画像間のRGB値の変化が小さいので、私が使用した関数は画像を再サンプリングしているようです。

私は、Photoshop、OSXプレビュー、およびPixelformerでさえ、256×256から256×256までピクセルの同じサイズ変更を実現できます。 私はそれが私のPHPを行うことができますか?

+0

ピクセルの寸法が同じであることを検出した場合、なぜimagecopyを使用しないのですか? –

+0

私はあなたの質問を完全に理解していませんが、各画像処理ライブラリは通常、同じ正確なアルゴリズムを使用しません。あなたのテストが何であれ、彼らはそのような前提に頼ることはできません。 –

答えて

1

あなたの画像フォーマット(jpeg - 100画質設定から想定)はロッシーなフォーマットなので、画像を再圧縮するときにこのように無損失のスループットを得ることはありません。

サイズが既に正しい場合は、イメージのサイズを検出して元のイメージを使用するようにしてください。

PhotoshopまたはOSXプレビューでサイズを変更しないと(元のサイズ=サイズ変更後のサイズ)、イメージは再圧縮されません。そのため、変更が表示されません。

+0

私のコードでは、私は100の圧縮値を設定する行がありますが、これは圧縮されません。圧縮されていない画像が同じままであるということではありませんか?たとえJPEGを使用していても、品質の低下が起こると、なぜ私はそれを圧縮する前に、ピクセルの値が変わったのですか?たとえば、=> imagecolorat($ img)....検索された値は元のものと同じではありません。 – tom91136

+0

jpegの品質が100で、遠く離れています – bardiir

+0

コメントをもう一度チェックしてください。iveは – tom91136

関連する問題