2011-01-03 17 views
0

イメージのサイズ変更に問題があります。イメージのサイズを変更して品質を維持しますか?

何が起こるかは、指定されたパラメータよりも大きなファイルをアップロードすると、画像がトリミングされ、100%の品質で保存されるということです。

272Kbという大きめのjpegをアップロードすると、画像は100個の奇数ピクセルで切り取られます。ファイルサイズは1.2Mbまで上がります。

イメージを100%の品質で保存しています。私はこれが問題を引き起こしていると考えています。イメージはPhotoshopから30%の品質でエクスポートされ、ファイルサイズが縮小されます。画像を100%の品質で保存すると同じ画像が作成されますが、冗長なファイルデータが多いと想定します。

誰もこれまでに遭遇したことはありますか?誰にも解決策がありますか?

これは私たちが使用しているものです。

$source_im = imagecreatefromjpeg ($file); 
$dest_im = imagecreatetruecolor ($newsize_x, $newsize_y); 
imagecopyresampled (
    $dest_im, $source_im, 
    0, 0, 
    $offset_x, $offset_y, 
    $newsize_x, $newsize_y, 
    $sourceWidth, $sourceHeight 
); 

imagedestroy ($source_im); 
if ($greyscale) { 
    $dest_im = $this->imageconvertgreyscale ($dest_im); 
} 
imagejpeg($dest_im, $save_to_file, $quality); 
break; 

答えて

5

30%で保存した後、100%で再保存すると、作物のサイズやサイズなど、冗長なデータが作成されます。

残念ながら、JPEG圧縮ではデータの損失が累積されるため、30%で圧縮して画像を処理した後、元の圧縮より常に再圧縮が悪くなります。経験則は、できるだけプロセスの最後まで、圧縮を避けることです(特に、30%の圧縮など)。したがって、100%(または必要ならば80%)でアップロードしてから圧縮してください。

編集:明らかに、jpegtranは、(それをグーグル)であれば、画像サイズは、特定の制約(16個のピクセルの通常の幅と高さ複数)を次のように、第一の画像を圧縮解除することなく、このようなトリミングなどの操作を行うことができます。自分で試したことはありませんが、あなたの目的に合うかもしれません。

+0

+1ワークフローを改善しました。 – deceze

0

あなたの仮定は正しいです、あなたは本質的に無損失で保存しています。私はビデオのエンコードでこの問題に遭遇しましたが、解像度を小さくして損失を少なくし、最終的なサイズを元のサイズの2倍にしました。十分な大きさの画像の場合は、パレットベースの画像タイプを使用して保存するか、またはネイティブの損失が少ないjpegタイプを使用して保存します。それは50-70%の品質で保存し、jpegはそれがうまくいくようにします。

2

JPEGを30%の品質で保存すると、多くのピクセル情報が保存されません。 gdを使用して再度開くと、新しい画像が鮮明な新しいピクセルで作成されます。これらのイメージが元々保存されていた品質によっては、これらのイメージが不適切であるかどうかは関係ありません。この新しいイメージを保存するときは、新しいJPEGファイルを作成します。品質を100%に設定すると基本的にすべてのピクセルが節約されますが、もちろん多くのスペースが必要です。 (私は一般化していますが、あなたはそのアイデアを得ています)元の画像が保存された品質設定は関係なく、100%の品質で大きな画像を保存するには多くのスペースが必要です。

唯一の解決策は、低品質の設定を使用して画像を保存することです。通常、70%前後のものは完璧とは区別がつきませんが、多くのバイトを節約します。ロスレスですが、より良い圧縮率を提供する(またはそうでないかもしれない)PNGを試してみてください。

関連する問題