我正在使用 java 缓冲图像裁剪图像。问题是裁剪后的图像在 DPI 方面质量下降。例如,如果父图像的 DPI 为 200,则裁剪后的图像 DPI 会降低到 96。正因为如此,我失去了 OCR 的准确性。
以下是我用来获取裁剪后的缓冲图像的代码片段。
BufferedImage cropImage( BufferedImage image, final int[] topLeft, int width, int height )
{
int x = Math.max( topLeft[CoOrdinate.X.getValue()], image.getMinX() );
int y = Math.max( topLeft[CoOrdinate.Y.getValue()], image.getMinY() );
int imageWidth = image.getWidth();
int imageHeight = image.getHeight();
width = ( x + width ) > imageWidth ? imageWidth - x : width;
height = ( y + height ) > imageHeight ? imageHeight - y : height;
return image.getSubimage( x, y, width, height );
}
然后我保存它使用ImageIO
File saveImage( String filePath, BufferedImage image )
{
String formatName = FilenameUtils.getExtension( filePath );
File croppedFile = new File( filePath );
try {
ImageIO.write( image, formatName,croppedFile );
return croppedFile;
} catch ( IOException e ) {
LOG.error( "IO Exception occured while saving a buffered image" );
throw new FileHandlingException( "IO Exception occured while saving a buffered image", e );
}
}
如何在不损失 DPI 质量的情况下裁剪图像?我看到了许多解决方案,Image Resizing
并且我理解调整大小会降低质量。但是裁剪、保留 DPI 应该很简单吧?
编辑:
ImageMagick 的裁剪正是我所需要的。但我将不得不使用 java 的命令行。现在不是我的选择。