问题描述
因此,我有一个可以在服务器上上传图像的系统。我使用metadata-extractor解决了自动旋转问题。问题是如果我上传的图像来自屏幕截图或其他内容,该怎么办。我想到了使用“如果条件”来了解图像的来源。那么,元数据提取器可以知道图像的来源吗?还是有其他解决方案?
private void rotateImage(BufferedImage originalImage,File file,String extension) throws ImageProcessingException,IOException,MetadataException {
Metadata Metadata = ImageMetadataReader.readMetadata(file);
ExifIFD0Directory exifIFD0Directory = Metadata.getFirstDirectoryOfType(ExifIFD0Directory.class);
JpegDirectory jpegDirectory = (JpegDirectory) Metadata.getFirstDirectoryOfType(JpegDirectory.class);
int orientation = 1;
try {
orientation = exifIFD0Directory.getInt(ExifIFD0Directory.TAG_ORIENTATION);
} catch (Exception e) {
log.error("EXCEPTION",e);
}
int width = jpegDirectory.getimageWidth();
int height = jpegDirectory.getimageHeight();
AffineTransform affineTransform = new AffineTransform();
switch (orientation) {
case 1:
break;
case 2: // Flip X
affineTransform.scale(-1.0,1.0);
affineTransform.translate(-width,0);
break;
case 3: // PI rotation
affineTransform.translate(width,height);
affineTransform.rotate(Math.PI);
break;
case 4: // Flip Y
affineTransform.scale(1.0,-1.0);
affineTransform.translate(0,-height);
break;
case 5: // - PI/2 and Flip X
affineTransform.rotate(-Math.PI / 2);
affineTransform.scale(-1.0,1.0);
break;
case 6: // -PI/2 and -width
affineTransform.translate(height,0);
affineTransform.rotate(Math.PI / 2);
break;
case 7: // PI/2 and Flip
affineTransform.scale(-1.0,1.0);
affineTransform.translate(-height,0);
affineTransform.translate(0,width);
affineTransform.rotate(3 * Math.PI / 2);
break;
case 8: // PI / 2
affineTransform.translate(0,width);
affineTransform.rotate(3 * Math.PI / 2);
break;
default:
break;
}
AffineTransformOp affineTransformOp = new AffineTransformOp(affineTransform,AffineTransformOp.TYPE_BILINEAR);
BufferedImage destinationImage = new BufferedImage(originalImage.getHeight(),originalImage.getWidth(),originalImage.getType());
destinationImage = affineTransformOp.filter(originalImage,destinationImage);
ImageIO.write(destinationImage,extension,file);
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)