アップロードされた画像を回転させるシステムに取り組んできました。アルゴリズムは次のように機能します。
1) User uploads a jpeg. It gets saved as a PNG
2) Link to the temp png is returned to the user.
3) The user can click 90left,90right, or type in N degrees to rotate
4) The png is opened using
$image = imagecreatefrompng("./fileHERE");
5) The png is rotated using
$imageRotated = imagerotate($image,$degrees,0);
6) The png is saved and the link returned to the user.
7) If the user wishes to rotate more go back to step 3 operating on the newly
saved temporary PNG,
else the changes are commited and the final image is saved as a jpeg.
これは、左右に 90 度回転するときに問題なく動作します。ユーザーは、品質を損なうことなく無限に何度も回転できます。問題は、ユーザーが 20 度 (またはその他の 90 度以外の角度) 回転しようとしたときです。20 度回転すると、画像がわずかに回転し、塗りつぶす必要のある領域を塗りつぶすために黒いボックスが形成されます。画像 (ブラック ボックスを含む) は png として保存されるため、次に 20 度回転すると、画像 (ブラック ボックスを含む) がさらに 20 度回転し、別のブラック ボックスを形成してたるみを吸収します。簡単に言うと、これを 360 度で行うと、残りの非常に小さな画像の周りに大きな黒いボックスが表示されます。ブラック ボックスをズームインしてトリミングしても、品質が著しく低下します。
ブラックボックスを回避する方法はありますか?(サーバーには imagick がインストールされていません)