0

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

4

0 回答 0