Обрезать Буферизованное изображение без потери dpi в Java - PullRequest
0 голосов
/ 06 ноября 2018

Я обрезаю изображение с помощью буферизованного изображения Java. Проблема в том, что обрезанное изображение теряет качество с точки зрения DPI. Скажем, например, если DPI родительского изображения имеет значение 200, то DPI обрезанного изображения уменьшается до 96. Из-за этого я теряю точность распознавания.

Ниже приведен фрагмент кода, который я использую для получения обрезанного буферизованного изображения.

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 должна быть простой, верно?

EDIT:

Обрезка ImageMagick делает именно то, что мне нужно. но мне придется использовать командную строку из Java. Для меня это не вариант.

...