-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
이미지 파일 업로드 시 회전 버그 해결 #367
Conversation
public int getImageDirection(File tempFile) {
int originalDirection = 1;
try {
Metadata metadata = ImageMetadataReader.readMetadata(tempFile);
Directory directory = metadata.getFirstDirectoryOfType(ExifIFD0Directory.class);
if (directory != null) {
originalDirection = directory.getInt(ExifIFD0Directory.TAG_ORIENTATION);
}
} catch (Exception e) {
originalDirection = 1;
}
return originalDirection;
} 메소드 시작부에서 originalDirection은 이미 1로 초기화되었지만, 예외가 발생했을 때 다시 한 번 1로 초기화하고 있습니다. |
파일 포맷과 무관하게 try {
BufferedImage originalImage = adjustImageDirection(multipartFile);
ImageIO.write(originalImage, extension, file);
} catch (Exception e) {
throw new IOException("이미지의 뱡향을 조정하는데 오류가 발생했습니다.", e);
} 수정된 코드는 이미지 파일이 아닌 경우에도 import org.springframework.web.multipart.MultipartFile;
private boolean isImageFile(MultipartFile file) {
String contentType = file.getContentType();
return contentType != null && contentType.startsWith("image/");
} MultipartFile의 contentType을 이용하여 이미지 파일을 식별하는 코드입니다. 참고 바랍니다. |
발생된 버그에 맞춰 프로젝트에 알맞은 의존성을 추가해서 문제를 해결해나가는 과정이 정말 인상적이었습니다! switch (originalDirection) {
case 1:
break;
case 3:
bufferedImage = Scalr.rotate(bufferedImage, Scalr.Rotation.CW_180, null);
break;
case 6:
bufferedImage = Scalr.rotate(bufferedImage, Scalr.Rotation.CW_90, null);
break;
case 8:
bufferedImage = Scalr.rotate(bufferedImage, Scalr.Rotation.CW_270, null);
break;
} 다만 이미지가 회전되는 현상에서 originalDirection의 범위를 1, 3, 6, 8번으로만 제한하신 이유가 궁금합니다! |
|
@SongJaeHoonn 이런 미러링이 orientation으로 기록되는 것은 셀카모드가 가장 대표적인 예시인데요. 거울과 같은 원리로 좌우가 뒤집어져 보이는 화면을 사용자가 보게 됩니다. 이를 처리하는 로직은 switch문에 명시할 때와, 하지 않을 때 모두 문제 없이 휴대폰에 저장된 원본 사진과 같은 이미지로 보여 따로 추가해주지 않았습니다! 생각해보니, 저도 궁금해서 찾아봤던 부분이고, 제3자가 읽을 때도 질문이 생길 수 있는 부분인 것 같은데, 블로그에 언급하지 않았었네요.. 해당 내용 추가해서 정리해두겠습니다! 짚어주셔서 감사합니다! |
Summary
이미지 파일 업로드 시 촬영 각도에 따라 회전하는 버그를 해결했습니다.
Tasks
적절하게 다시 회전 후 서버에 이미지를 저장합니다.
ETC
Screenshot