2012-01-06 87 views
1

雖然我在做一些圖像處理,我發現,GD和Imagick在PHP不調整圖像顏色的像素相同的水平,這在大多數情況下,都沒有必要的。 現在,以防萬一,我需要從任何尺寸的圖像縮放到256 * 256圖像調整大小在PHP

爲了確保測試結果是一致的,我使用了一個256 * 256的圖像,並調整它的大小。

我已經嘗試:

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 

他們沒有工作,如果我比較原始圖像的輸出,它會是這個樣子: Araxis merge comparison on original VS resized

它看起來像我使用的功能是重新採樣圖像,因爲兩個圖像之間的RGB值的變化很小

我可以實現像素從256 * 256 256 * 256在Photoshop,OSX預覽,甚至Pixelformer象素相同大小調整。 我想知道如何做到這一點我的PHP?

+0

如果您檢測到像素尺寸相同,爲什麼不使用imagecopy? – 2012-01-09 10:13:35

+0

我不知道我完全理解你的問題,但每個圖像處理庫通常*不會*使用相同的確切算法。無論你的測試是什麼,他們都不能依賴這樣的假設。 – 2012-01-09 10:19:09

回答

1

由於您的圖像格式(JPEG - 從100質量設置假設)是你重新壓縮圖像,你不會得到無損吞吐量這種方式有損格式。

你應該嘗試檢測圖像的尺寸和使用原始圖像,如果尺寸已經是正確的。

當你不改變在Photoshop或OSX預覽尺寸(原始尺寸=尺寸調整後),他們將不會重新壓縮圖像,這就是爲什麼你不會看到任何變化。

+0

但在我的代碼中,有一行我將壓縮值設置爲100,這是沒有壓縮。不是說未壓縮的圖像會保持不變嗎?即使我使用JPEG,質量損失時也會發生;爲什麼像素的值在我壓縮之前沒有改變?例如=> imagecolorat($ img)....檢索到的值與原始值不相同。 – tom91136 2012-01-09 15:43:36

+0

JPEG爲100質量遠離非壓縮 – bardiir 2012-01-09 15:44:51

+0

再次檢查的評論,我已經更新它 – tom91136 2012-01-09 15:46:50