4

GD は機能が少ないため、PHP で画像編集を行っていたので、Imagick に切り替えました。

プロセスの 1 つは、画像をグレースケール化することです。スクリプトを Web ホスティング サーバー (Linux、Imagick 3.0.1、6.2.8、2010-10-20、 Q16)。

品質を変更しようとしましたが、何も改善されませんでした。

$img->setImageCompression(imagick::COMPRESSION_JPEG);
$img->setImageCompressionQuality(100);

GD、Imagick、Photoshop の結果は次のとおりです。 ここに画像の説明を入力

バージョン 3.0.1 に問題があると思います。誰かがそれを確認できますか?

Q1: で画像をグレースケールに変換する別の方法はありImagickますか?

Q2: GD リソースを Imagick に変換することは可能ですか? したがってimagefilter($img, IMG_FILTER_GRAYSCALE);、正しい結果を取得してから Imagick で出力するために使用できます。

ps: Q2 では、GD を使用して画像を処理することをお勧めします。しかし問題は、解像度を保持imagejpeg()したまま画像を保存できないことです。それが実際に私が Imagick に切り替えた理由です。

4

4 に答える 4

2

これは、php/imagick で白黒写真を作成する私の好みの方法です。$im = $im->fxImage('intensity');

これにより、強度が に等しい関数が画像に適用され0.299*red+0.587*green+0.114*blueます。

その式は、私たちの目がさまざまな色に対してどのように敏感であるかに基づいているため、それと「フラットな」グレースケール画像の違いは、実際には昼と夜です。

詳細はこちら:

于 2015-12-03T17:19:37.383 に答える
0

この Web サイトを参照して、ここにあるイメージ Magick オペレーターをチェックしてくださいwww.rubblewebs.co.uk/imagemagick/

また、www.fmwconcepts.com/imagemagick/にアクセスすると、ここにいくつかの例が見つかります...

于 2012-11-25T03:56:30.573 に答える
0

好みの画像クラスを使用してから、 readImageBlob メソッドを使用して imagick http://www.php.net/manual/en/imagick.readimageblob.phpに送信できます。

于 2014-04-16T12:32:14.963 に答える
0
function ImagickToGD($imagick){
    $tmpfile = tmpfile();
    $imagick->writeImage($tmpfile);
    return imagecreatefromstring(file_get_contents($tmpfile));
}

この関数はクリーンアップを行わないことに注意してください (PHP が自動的にクリーンアップする一時ファイルを除く)。

たとえば、コードは次のようになります。

$img = new Imagick();
// ...
$gd = ImagickToGD($img);
unset($img); // destroy imagick
imagefilter($gd, IMG_FILTER_GRAYSCALE);
imagejpeg($gd, $target_name, 100);
imagedestroy($gd);

また、「解像度を保つ」という部分がわかりませんでした。これらの操作には、解決に関連するものは何もありません。私の推測では、あなたは圧縮を意味していましたか?完全な品質 (つまり、圧縮なし) が必要な場合は、単純に圧縮値として 100 を使用します (私が行ったように)。

これにより、既存の品質が維持されます。これは、70% の品質の画像を開いて 70% の品質で保存し直すと、実際には最終的な品質が 49% (70% の 70%) 低下するためです。


function GDToImagickTo($gd){
    $tmpfile = tmpfile();
    imagepng($tmpfile); // Png is our best image deal:
                        // lossless compression, transparency etc..
    $imagick = new Imagick()
    $imagick->readImage($tmpfile);
    return $imagick;
}
于 2012-11-25T01:43:04.163 に答える