2012-06-15 81 views
0

我使用Imagick庫在PHP中使用ImageMagick。我首先從外部服務器讀取(JPEG)圖像用:Imagemagick具有灰度圖像和24位深度

$img = new Imagick(); 
$img->readImage($source); 

然後將其與下面的代碼上傳到我的亞馬遜S3鬥:

$s3 = new AmazonS3(); 
$s3->create_object(BUCKET, $destination_path, array(
    'body' => $img->getImageBlob(), 
    'length' => $img->getImageSize(), 
    'acl' => AmazonS3::ACL_PUBLIC, 
    'contentType' => 'image/jpeg' 
)); 

似乎一切都工作正常,這些文件出現在我的存儲桶中,我可以在瀏覽器中查看它們。但是,在處理灰度圖像時,ImageMagick會將圖像從24位深度轉換爲8位深度。我希望他們保持他們的24位深度,我怎麼能做到這一點?我試過以下,但沒有成功:

$img->setImageType(imagick::IMGTYPE_TRUECOLOR); 

對於彩色圖像,一切工作正常,圖像保持自己的24位深度。

編輯:

似乎ImageMagick的從圖6(真彩色)圖像類型改變爲2(灰度)。試圖覆蓋這個不起作用,如用下面的代碼進行測試:

$img = new Imagick(); 
$img->readImage($source); 
$img->setImageType(6); 
echo $img->getImageType(); 

它輸出2

回答

0

使用的setType()加載的圖像之前。所以:

$img = new Imagick(); 
$img->setType(6); //or use imagick::IMGTYPE_TRUECOLOR instead of 6 
$img->loadImage($source); 

即使加載的圖片只使用灰色,這將輸出一個真彩色的圖像。