6

現在、GD と PHP を使用して画像を回転させています。回転するたびに画質が悪くなります。これを行うためのより良い方法はありますか、それとも予想されますか?

    $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

4 に答える 4

4

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

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

ただし、回転と回転されたコピーの場所のために、データベースにさらに 2 つの列が必要になります。また、常に最初のサイズ変更 (およびサイズが異なる場合は複数回) を行うことを想定しているため、余分な列は、回転するまでオリジナルを指すのではなく、常にコピーを指すようになります。

于 2012-07-04T15:19:46.953 に答える
3

有限行列で画像を回転すると、サーバー側またはクライアント側の品質の低下を避けることができず、それらの低下は回転ごとに追加されます。

同じ画像から多くの回転した画像が必要な場合は、最後に回転した画像を回転させるのではなく、常に最初の (回転していない) 画像をソースとして使用し、角度を増やす必要があります。

于 2012-07-04T15:16:28.593 に答える
1

いくつかのポイント

  • dystroy が書いたように、圧縮された画像で使用すると回転が失われます
  • クライアント側の回転は通常、画像操作ではなく、ビュー内の画像オブジェクトの回転であるため、サーバーに送信すると元の画像になります
  • ImageMagick は、変換に関して GD よりも優れた結果をもたらすと噂されています ( http://de.php.net/imagickを参照) 。
于 2012-07-04T15:30:21.123 に答える
1

JPG を保存するたびに、品質が低下します。これは「損失のある」形式です。PNG を使用する場合は、「ロスレス」形式であるため、品質を損なうことなく何度でも回転できます。

于 2012-07-04T15:20:51.773 に答える