既存のJPG画像を回転させる必要があります。それらはすでにいくつかの詳細を失っていますが、私は今それらを回転させてそれ以上の詳細を失いたくありません。
少し調べてみると、PHP用のロスレス画像回転ライブラリはjPegTranライブラリを使用することだけのようです。
ロスレスjpgローテーションを行う場合、他にオプションはありますか?
ありがとう!
既存のJPG画像を回転させる必要があります。それらはすでにいくつかの詳細を失っていますが、私は今それらを回転させてそれ以上の詳細を失いたくありません。
少し調べてみると、PHP用のロスレス画像回転ライブラリはjPegTranライブラリを使用することだけのようです。
ロスレスjpgローテーションを行う場合、他にオプションはありますか?
ありがとう!
exec('commandline');によってlosslessrotatorなどの外部プログラムを呼び出すことはできませんか?
別のオプションは、jpegclubによるjpegtranです。
cw または ccw を 90 度回転させるときは jpegtran に注意してください。すべてのピクセルが期待どおりに回転するわけではありません。サイズが jpeg ブロック サイズ (通常は 8x8 ピクセル) の倍数である領域内でのみ無損失回転を行うことができるからです。画像の再圧縮を避けるために、これらの各ブロック内のピクセルを内部的に回転させますが、エッジ ブロックはそのように回転させることはできません。したがって、jpegtran -rotate 90 または 270 を使用すると、エッジに回転していないピクセルの小さなストリップが残り、それらを取り除くために -trim オプションを使用する必要がありますが、結果の画像は数ピクセル小さくなります。オリジナルより。
したがって、ロスのない回転ですが、プロセス中にいくつかのピクセルが失われることになります。
JPEGは不可逆形式であるため、答えはノーです。アプリケーション、プログラミング言語、または教祖の瞑想でJPEGの可逆ローテーションを作成することはできません。
$quality
ただし、回転したJPEGをJPEG形式で保存する場合は、回転したJPEGを保存するときに引数を使用して、画像データの損失を最小限に抑えることができます。ロスレス形式で保存している場合は、画像データの損失を最小限に抑えています。
例:
$img = imagecreatefromjpeg($file);
$rot = imagerotate($img, 90, 0);
imagejpeg($rot, $output, 100); /* set quality to 100% */