サムネイルを生成する次の方法があります。それは任意の次元を取り、それを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の最初のフレームを中心にサムネイルを生成するにはどうすればよいですか?
ちょうど質問ですが、Imagemagickをexec()とコマンドラインを使用してImagick APIに落とす理由は不思議です。 – Bonzo
Imagickとコマンドラインを混ぜる理由は分かりませんが、一般に、ファイル名の後に角括弧でフレーム番号を指定できるので、GIFの最初のフレームでは 'image.gif [0]' 。 –
@Bonzo APIを使ってコマンドラインを実行できるかどうかはわかりませんでしたが、ここではコマンドラインを使って答えを見つけました。 – frosty