Java 使用JMagick对图像进行重采样

Java 使用JMagick对图像进行重采样,java,imagemagick,jmagick,Java,Imagemagick,Jmagick,如何使用JMagick API执行以下操作: 对图像重新采样 (ImageMagick命令)Convert-units pixelsprench-resample 300x300` 在API中,我找不到任何与更改每像素dpi相关的内容 展平图像层: (ImageMagick命令)Convert-图层合并 请建议。 对于-resample和-layer选项,似乎都没有方便的方法 JMagick的API文档中唯一类似于这些选项的是类MagickImage中的方法。但是,它仅以像素为单位。确实有一种

如何使用JMagick API执行以下操作:

对图像重新采样

(ImageMagick命令)
Convert-units pixelsprench-resample 300x300
`

在API中,我找不到任何与更改每像素dpi相关的内容

展平图像层:

(ImageMagick命令)
Convert-图层合并

请建议。

  • 对于
    -resample
    -layer
    选项,似乎都没有方便的方法
JMagick的API文档中唯一类似于这些选项的是类
MagickImage
中的方法。但是,它仅以像素为单位。确实有一种方法允许您更改图像文件头中声明的单位。但仅此而已。它不会修改图像本身。而且
sampleImage
setUnits
方法之间似乎没有联系

有一些代码可以使用“手动”计算对图像重新采样。以下代码段基于可用的代码段:

  • 可能的替代方案
我建议你试试。网址:

JMagick是ImageMagick C-API之上的一个很薄的JNI层。im4java在 对比度只是为ImageMagick命令生成命令行 并将生成的行传递给选定的IM命令(使用 java.lang.ProcessBuilder.start()-method)

因此,无论ImageMagick有什么命令选项,im4java都应该有一个方法。我已经快速查看了API,确实有一个和一个方法。使用它们,您的代码将如下所示(基于以下示例):

希望这有帮助

MagickImage lightImg = new MagickImage (new ImageInfo (strOrigPath));

//Get the original resolution 
double origXRes = lightImg.getXResolution();
double origYRes = lightImg.getYResolution();

//Get present dimensions
int w = (int)lightImg.getDimension().getWidth();
int h = (int)lightImg.getDimension().getHeight();

//Calculate new dimensions
double new_w =  w / origXRes * newXRes;
double new_h =  h / origYRes * newYRes;

//Scale image 
lightImg =lightImg.scaleImage((int)new_w, (int)new_h);

//Update info on image file
lightImg.setFileName(strDestPath);
lightImg.setXResolution( newXRes);
lightImg.setYResolution(newYRes);

//Save image
lightImg.writeImage(new ImageInfo());
// create command
convertCmd cmd = new ConvertCmd();

// create the operation, add images and operators/options
IMOperation op = new IMOperation();
op.units("pixelsperinch");
op.addImage(strOrigPath);
op.resample(300, 300);

// execute the operation
cmd.run(op);