我们是否可以通过数码相机知道图像的来源,或者不使用Metada-Extractor?

问题描述

因此,我有一个可以在服务器上上传图像的系统。我使用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);
 }

原始

Original

上传

Image Uploaded

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)