作成中の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のバージョンに問題があるようです。すべての助けをありがとう!