2016-03-18 11 views
0

サムネイルを生成する次の方法があります。それは任意の次元を取り、それを600×450のイメージに変換します。ImageMagickでGIFの最初のフレームから中央のサムネイルを生成

private function generateThumbnail ($ext, $name) { 

    if ($ext === ".png"){ 
     exec('convert -define png:size=1200x900 '.$this->file.' -thumbnail 600x450^ -gravity center -extent 600x450 '.$name); 
     exec("optipng -o2 -q " . $name); 
    } else { 
     exec('convert -define jpeg:size=1200x900 '.$this->file.' -thumbnail 600x450^ -gravity center -extent 600x450 '.$name); 
     $img = new Imagick($name); 
     $img->setImageCompression(Imagick::COMPRESSION_JPEG); 
     $img->setImageCompressionQuality(97); 
     $img->stripImage(); 
     $img->writeImage($name); 
     $img->destroy(); 
    } 

} 

GIFからサムネイルを生成するときに問題が発生します。最初のフレームから画像を生成しません。 1つのGIFには空の画像(透明)があり、別のGIFには奇妙な色/品質がありました。

GIFの最初のフレームを中心にサムネイルを生成するにはどうすればよいですか?

+0

ちょうど質問ですが、Imagemagickをexec()とコマンドラインを使用してImagick APIに落とす理由は不思議です。 – Bonzo

+0

Imagickとコマンドラインを混ぜる理由は分かりませんが、一般に、ファイル名の後に角括弧でフレーム番号を指定できるので、GIFの最初のフレームでは 'image.gif [0]' 。 –

+0

@Bonzo APIを使ってコマンドラインを実行できるかどうかはわかりませんでしたが、ここではコマンドラインを使って答えを見つけました。 – frosty

答えて

0

APIを使用している可能性がありますが、制限されているため使用しません。しかし、あなたはまだoptipngプログラムにコマンドラインを使用する必要があるように見えるので、私はコマンドラインを使い続けていました。

とにかく問題に戻る。 GIFの最初のフレームが透明なイメージか奇妙なイメージではないことをどうやって知っていますか?

@Mark Setchellは、input.gif [0]で特定のフレームを指定できるはずだと言いました。私は別の番号でそれを試して、あなたが得たものを見ていきます。 私はアニメーションを使用していませんが、gifフレームを-coalesceで見ることができるはずです。 http://www.imagemagick.org/Usage/anim_basics/#coalesce これはあなたのGIFのフレームのアイデアを与える必要が:

montage script_k.gif -coalesce \ 
      -tile x1 -frame 4 -geometry '+2+2' \ 
      -background none -bordercolor none coalesce_k_montage.gif 

あなたが作られ、どのようにGIFファイルを参照し、おそらく第二または第三のフレームのために行くのではなくできるアンソニーは自分のサイト上のいくつかの例があります最初。

関連する問題