나는 시스템에서 업로드 된 이미지를 회전하고 있습니다. 알고리즘은 다음과 같이 작동합니다.무손실 이미지 회전 PHP
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이 설치되어 있지 않습니다.)
https://bugs.php.net/bug.php?id=25303 – hakre
아니요, 없습니다. 이미지는 스퀘어 모서리를 가져야합니다. 스칼라 이미징이 작동하는 방식이기 때문에 무언가를 채워야합니다. 20도 회전하면 실제로 40도 회전을 원하지만 기본 이미지에서 다시 시작해야합니다. 그렇지 않으면 이미지가 필연적으로 후속 작업에서 부식됩니다. 말 그대로 당신이 이것에 관해 할 수있는 것은 없습니다. – DaveRandom
@hakre -이 이유 때문에 JPEG가 아닌 PNG로 작동합니다. – user974896