2012-07-04 12 views
5

現在、GDとPHPを使用してイメージを回転しています。各回転の後、画像の品質は悪化する。これを行うには良い方法はありますか?これが期待されていますか?PHPイメージの回転が1回転ごとに品質を失う

$img = new ImageClass; 
    list($original, $info) = $img->load($src); 

    // Determine angle 
    $angle = strtolower($angle); 
    if($angle == 'cw' || $angle == 'clockwise') $angle = 270; 
    if($angle == 'ccw' || $angle == 'counterclockwise') $angle = 90; 

    $rgb = $img->hex2rgb($bg_color); 
    $bg_color = imagecolorallocate($original, $rgb['r'], $rgb['g'], $rgb['b']); 

    $new = imagerotate($original, $angle, $bg_color); 

それは多分jQueryを使って画像のクライアント側を回転させ、その後、サーバにPHPを介して画像を保存することは可能ですか?私はこれが画質に役立つと仮定しています。

答えて

4

私たちの共有サービスでは、これを別の方法で処理しています。元の画像を常に保持し、最初の回転(0)を保存します。

回転すると元のイメージが読み込まれ、回転+/- 90に従って回転し、コピーがファイルシステムに書き込まれます。その後、データベースは新しいローテーションで更新されます。

ローテーションとローテーションされたコピーの場所については、データベースにはさらに2つの列が必要です。私はまた、あなたはいつも最初のサイズ変更(そしておそらくサイズの異なる複数)を行うと仮定しています。そのため、追加の列は、回転するまで、ときどきオリジナルを指すのではなく、常にコピーを指しています。

+0

これはiPhotoの仕組みでもあります。 – dkamins

3

イメージを有限のマトリックスで回転すると、品質、サーバー側またはクライアント側の劣化を回避することはできず、各回転ごとにその劣化が追加されます。

同じイメージから多くの回転イメージを必要とする場合は、最初に回転させたイメージをソースとして使用し、最後に回転したイメージを回転する代わりに角度を増やす必要があります。

+0

http://de.php.net/imagickを参照)変換にGDよりも良好な結果を提供するために噂されている原画像

  • あろう魔方陣はクライアントサイドでJSやCSSを使って回転していますが、ブラウザは基本的にJackの解答で説明しています。したがって、イメージを何度でも再回転することができます。回転を追加するたびに劣化することを心配することなく、連続して回転させることもできます。 –

  • +0

    あなたは同じイメージクライアント側の何度も回転することができます... –

    +0

    何かこの種のことを行う任意のクライアント側の推奨scrpts? – Paul

    1

    JPGを保存するたびに、品質が低下します。それは「損失の多い」フォーマットです。 PNGを使用している場合は、「ロスレス」形式なので、ゼロ品質損失で何度でも回転することができます。

    +1

    いいえjpegに保存すると画質が低下しますが、画質を損なうことなく画像を回転させることはできません。 –

    1

    いくつかのポイント

    • 圧縮画像に使用された場合dystroyが書いたように、回転は非可逆である
    • クライアント側の回転は通常、画像操作が、ビュー内の画像オブジェクトの回転ではないので、ときにサーバに送信し、そのとき、私のImageMagickが、実際