2016-07-10 3 views
0

私は自分の画像ごとに大きなファイルを追加できるように単純なPHP画像サーバを設定しようとしています必要に応じて。私のテストファイルでは、サイズ2400 x 1200のイラストレーターから21.6KBのファイルサイズを持つ "save for web"経由でエクスポートされたpng8から始めます。Imagickを使用している私のPHP画像サーバは、クロップ/縮小後にはるかに大きなpng8ファイルを生成します。

ImagickのcropThumbnailImage関数を使用して600×600に縮小すると、結果のファイルは62.1KB(実質的に小さい画像の場合は3倍)になります。イラストレーターのクロックから保存された同じイメージの600 x 600作物は約8.2KBです。追加された利便性のために控えめなファイルサイズの増加を受け入れることができますが、〜8倍の増加はあまりにも大きすぎます。

ファイルを保存する際には、png8に出力を強制して、デフォルトではロスレスpng形式にならないようにしますが、それ以外の方法はわかりません。ここで

は私の処理コードです:ここで

//create working image 
$image = new Imagick($this->orig_file); 

// Set Compression 
$image->setImageCompressionQuality(9); 

//scale image to height 
$image->cropThumbnailImage ($this->w, $this->h); 

// strip extra data 
$image->stripImage(); 

// save file 
$image->writeImage('png8:'.$this->output_file); 

は私のテストファイルは、次のとおりです。

Original Full scale image outputted by illustrator.

Cropped 600 x 600 image generated by imagick.

[EDIT:下記のマークの提案を1として、私は次の変更を追加しました]

// replacing cropThumbnailImage with: 
$image->resizeImage(0, $this->h, imagick::FILTER_TRIANGLE, 1); 

// crop 
$start = ($image->getImageWidth()/2) - ($this->w/2); 
$image->cropimage($this->w, $this->h, $start, 0); 

// reduce colors to 20 
$image->quantizeImage($this->q, 1, 0, true, false); // using 20 as $this->q 

最終結果は62.1KBから50.4KBになりますが、フルサイズの画像のサイズは2倍以上に優れていますが、イラストレーターがそのサイズでWebバージョンを保存すると何倍も大きくなります。

600x600 image reduced to 20 colors and resized not thumbnailed

+1

グレンはあなたに答えを教えてくれると確信していますが、待っている間にサムネイルではなく新しい色を導入しないで、scaleImage()を試してみてください。または、サムネイルの色数を減らしてみてください。約30、約50〜60を試してみてください。 –

+0

返信いただきありがとうございます!私は以下の変更を試みました:QuantizeImageを使って20のように色を減らしてください。 $ image-> quantizeImage($ this-> q、1、0、true、false); サムネイルの代わりにサイズ変更イメージ(三角形フィルタ)とクロップを使用します。 最終結果は62KBから50KBになりました。正しい方向への一歩だが、まだ私が望むところではない。 http://amorphia-apparel.com/image/jabba.600.reduce.q20.png –

+0

私の答えはあなたの問題を整理しましたか?もしそうなら、それをあなたの答えとして受け入れることを検討してください - 投票数の横にある緑色のチェックマーク/チェックマークをクリックしてください。そうでない場合は、私が、または他の誰かがあなたをさらに助けることができるように、何がうまくいかないと言ってください。ありがとう。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235 –

答えて

1

あなたの元の画像は33色があり、22KBの重さ。

あなたは(コマンドラインではある)。このようにサイズを変更する場合:

convert jabba.png -resize 600x600 -strip png8:result.png 

を出力ファイルが6.6kBになります。

あなたは私が-scaleで提案のようにサイズを変更する場合:

convert jabba.png -scale 600x600 -strip png8:result.png 

出力ファイルは5.0kBになります。

-quality 9を保存すると、25kB以上になります。

+0

興味深いことに、$ image-> setImageCompressionQuality(9);それはPHPのバージョンで11KBにfilesizeを削減します。圧縮品質はファイルを表示するために使用したCPU作業の量にのみ影響を与えたとPNGsは考えましたが、無損失PNGの場合にのみ当てはまります。ありがとう! –

関連する問題