0

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を出力します

4

1 に答える 1

0

画像をロードする前にsetType()を使用してください。それで:

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

これにより、ロードされた画像がグレーカラーのみを使用している場合でも、トゥルーカラーの画像が出力されます。

于 2012-06-18T11:10:22.820 に答える