Захваченный кадр вращается на 90 градусов прямо на сервере
Кадр или изображение захватывается с видео, отправленного на мобильный Android, используемый Jcodec(<artifactId>jcodec</artifactId>
а также <artifactId>jcodec-javase</artifactId>
Version 0.2.2
) чтобы захватить изображение в Java. Все работает нормально, но при отображении фото наклоняется вправо на 90 градусов. Я не могу обнаружить, что вращение происходит во время захвата кадра или во время его отображения!
На локальном сервере (tomcat7) работает нормально (изображение в самом портрете), но эта проблема возникла, когда я отправляю код в AWS, на котором установлен tomcat8. И после загрузки размер изображения (JPEG) из AWS составляет 28 КБ, с локального сервера - 118 КБ.
Я делюсь своим кодом здесь Любой Пожалуйста, скажите мне, где он идет не так, и любые ссылки для решения этой проблемы будут очень полезны.
Код захвата кадра:
int frameNumber = 1;
Picture picture = FrameGrab.getFrameFromFile(file, frameNumber);
BufferedImage bufferedImage = AWTUtil.toBufferedImage(picture);
ImageIO.write(bufferedImage, "jpg", new File(id + File.separator + fileName + "_" + fileName + ".jpg"));
Код, отображающий изображение:
public ResponseEntity<Resource> getPhoto(@PathVariable(value = "id") Integer id) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.IMAGE_JPEG);
String absolutePath = new File(".").getAbsolutePath();
File file = new File(Paths.get(absolutePath).getParent() + "/" + id);
if (null != file) {
FilenameFilter beginswithm = new FilenameFilter() {
public boolean accept(File directory, String filename) {
return filename.startsWith("photo");
}
};
File[] files = file.listFiles(beginswithm);
if (null != files && files.length > 0) {
Resource resource = null;
for (final File f : files) {
headers.set("Content-Disposition", "inline; filename=" + f.getName());
resource = appContext.getResource("file:"
+ Paths.get(absolutePath).getParent() + "/" + id + "/" + f.getName());
return new ResponseEntity<>(resource, headers, HttpStatus.OK);
}
}
}
RecruiterResponseBean resBean = new RecruiterResponseBean();
resBean.setStatusMessage(Constants.FAILED);
resBean.setStatusCode(Constants.FAILED_CODE);
return new ResponseEntity(resBean, HttpStatus.NOT_FOUND);
}
1 ответ
В Android вы можете использовать ExifInterface, чтобы узнать, есть ли у изображения / видео поворот.
ExifInterface exifInterface = new ExifInterface(mFile.getPath());
int orientation = exifInterface.getAttributeInt(TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED);
Matrix matrix = new Matrix();
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
matrix.postRotate(90);
break;
case ExifInterface.ORIENTATION_ROTATE_180:
matrix.postRotate(180);
break;
case ExifInterface.ORIENTATION_ROTATE_270:
matrix.postRotate(270);
break;
default:
break;
}