我正在使用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的命令行。现在对我来说不是一个选择。