2

次の方法でPHPでpng画像を変換しようとしています:

exec($cmd, $output, $return_code);

$cmd には、次のコード行が含まれています。

/usr/bin/convert 'images/original/Id1741.png' -thumbnail x200 -quality '90' './cache/a3b84c5931d9619d12a9e244a310cb17_h200.png'

コマンド ラインでこのコードを呼び出すと問題なく動作しますが、Web サーバーで実行すると次のエラー メッセージが表示されます。

Tried to execute : convert 'images/original/Id1741.png' -thumbnail x200 -quality '90' './cache/a3b84c5931d9619d12a9e244a310cb17_h200.png', return code: 1, output: Array()

サムネイル オプションを削除すると、コマンドは Web サーバー上で問題なく実行されますが、明らかに何もサイズ変更されません。したがって、パーミッションや私が推測するセットアップの問題ではありません。

PHPのバージョンは5.2.17. ImageMagick のバージョンは次のとおりです。6.6.0-4 2012-04-26

誰もが同様の問題を抱えていて、これで私を助けることができますか?

4

2 に答える 2

2

わかりました、ようやく修正しました。stderr をファイルにリダイレクトした後、次のエラーが見つかりました。

libgomp: Thread creation failed: Resource temporarily unavailable

私のホスティング事業者 1&1 は最近、ImageMagick のバージョンをアップグレードしたようです。これは明らかに古いものより多くのメモリを使用しています (少なくとも、ホスティング事業者はそう言っています)。彼らは、ImageMagick によって作成されるスレッドの数を制限することを推奨しています。

putenv('MAGICK_THREAD_LIMIT=1');

このコードを init-script に入れると、問題なく動作するようになりました!

于 2012-08-23T22:31:35.727 に答える
1

PNGに変換していますが、設定しています(一見、 JPEG品質設定-quality 90に類似しているようです)。

ただし、PNG 出力の場合、この設定は JPEG の品質設定 (単純に からまで-qualityの整数) とは大きく異なります。0100

PNG の場合、2 つの 1 桁で構成されます。

  • 最初の桁 (10 の位) は(大部分) zlib 圧縮レベルであり、 から0まで変化する可能性があり9ます。
    (ただし、 の設定に0は特別な意味があります。これを使用すると、zlib 圧縮レベル 0 ではなく、ハフマン圧縮が得られます。多くの場合、これの方が優れています...奇妙ですが本当です。)

  • 2 桁目は、PNG データ エンコーディング フィルタ タイプです(圧縮前)。

    • 0 はなし、
    • 1は「サブ」、
    • 2は「上」、
    • 3は「平均」、
    • 4は「ペイス」、そして
    • 5は「適応」です。

実際には、次のことを意味します。

  • 単色の連続したイラストの場合-quality 00、通常は「なし」フィルター ( ) が最も適しています。
  • 自然の風景の写真には、「適応型」フィルタリング ( -quality 05) が一般的に最適です。

-quality 90この情報に照らして、設定を再検討する必要があるかもしれません。

もしかしたら、すでに気づいていたかもしれません。この場合、「合唱団に説教」したことをお詫びします。:-)

于 2012-08-23T13:49:13.020 に答える