PHPでImageMagickを操作するためにImagickライブラリを使用しています。私は最初に外部サーバーから(JPEG)画像を次のように読み取っています。
$img = new Imagick();
$img->readImage($source);
次に、次のコードを使用してAmazonS3バケットにアップロードします。
$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を出力します