0

作成中のWebサイトの画像スクリプトを作成中です。画像モードの1つでは、画像をトリミングし、角を丸くする必要があります。これは私が今使っているコードです:

$img = new Imagick();
$img->readImageBlob($data);
$img->resizeImage($width, $height, $img->FILTER_GAUSSIAN, 1);
$canvas = new Imagick();
$canvas->newImage($size[0], $size[1], new ImagickPixel('white'));
$canvas->compositeImage($img, imagick::COMPOSITE_OVER, 0, 0);
$canvas->roundCorners(10, 10);
$canvas->setImageFormat('png');

結果の画像

ただし、上記のように、結果として得られる画像は、roundCornerによって作成されたエッジの周りの10ピクセルの境界線を除いて、ほぼ半透明です。$ imgを直接トリミングしたり、roundCornerをトリミングしたりするなど、さまざまな方法を試しましたが、結果として丸みがなくなりました。

このドラマではcompositeImageが泥棒だと思いますが、はっきりとは言えません。誰?

編集:修正:切り抜きと丸みを帯びたソリューションを実行すると、角が丸くなりますが、背景が黒になります。これは私がここで使用しているコードです。誰かがエラー/解決策を見つけましたか?

$img = new Imagick();
$img->readImageBlob($data);
$img->resizeImage($width, $height, $img->FILTER_GAUSSIAN, 1);
$img->cropImage($size[0], $size[1], 0, 0);
$img->roundCorners(10, 10);

編集2:クロップとラウンドの解像度の解決策は、それがpngであることを確認することでした。これにより、アルファがサポートされます。ただし、結果は元のコードから生成されたものと同じです。

編集3:デプロイメントサーバーでこのスクリプトを試してみましたが、希望どおりに機能したため、macportsに付属しているimagick/php-imagickのバージョンに問題があるようです。すべての助けをありがとう!

4

2 に答える 2

0

あなたはimagemagickにあなたにアルファ背景を与えるように言うことができます

$img->setImageAlphaChannel ( imagick::ALPHACHANNEL_TRANSPARENT )

または、変換を行う前に、画像形式を明示的にPNG24に設定してみてください。

ここでは順序が重要です。背景を公開する前に、画像にアルファチャネルが必要です。

于 2011-06-17T07:51:02.020 に答える
0

これは、現在のmacportsに同梱されているImagick/php-imagickのバージョンに問題がありました。私のコンピューターでは解決していませんが、スクリプトは展開サーバーで意図したとおりに機能しています。

于 2011-06-17T19:49:16.850 に答える