使用JMagick重新采样图像



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

重新采样图像

(ImageMagick命令)Convert -units pixelsperinch <input file> -resample 300x300`

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

压扁图像层:

(ImageMagick命令)Convert <inputfile withlayers> -layers merge <outputfile >

请提出建议。

  • 对于-resample-layers选项,似乎都没有方便的方法

JMagick的API文档中唯一与这些选项类似的是类MagickImage中的方法sampleImage。然而,这只适用于像素。确实有一个setUnits方法允许您更改图像文件头中声明的单位。但仅此而已。它不会修改图像本身。而CCD_ 8和CCD_。

有一些代码可以使用"手动"计算对图像进行重新采样。以下片段基于此处可用的片段:

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());
  • 可能的替代方案

我建议您尝试im4java。来自网站:

JMagick是ImageMagick C-API之上的一个薄薄的JNI层。im4javacontrast只生成ImageMagick命令的命令行并将生成的行传递给所选IM命令(使用java.lang.ProcessBuilder.start()-方法)。

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

// 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);

希望这能有所帮助!

相关内容

  • 没有找到相关文章

最新更新