im4Java - 调整大小的动态操作

时间:2012-11-07 16:03:21

标签: java image-processing imagemagick im4java

我正在使用im4Java lib来调整我的图像大小。我看到你可以设置一个模板操作,它有输入和输出文件的占位符。我知道你可以初步设置操作的调整大小尺寸,但是可以设置调整大小尺寸也是动态的操作吗?

这是我目前的代码:

   IMOperation op = new IMOperation();
   op.addImage();
   op.resize(500, 500); // I would like to make this dynamic
   op.quality(70d);
   op.addImage();

1 个答案:

答案 0 :(得分:0)

您可以实现DynamicOperation接口并将其添加到操作堆栈中。

示例用例:

需要将给定图像的尺寸调整为图像尺寸集中的所有其他图像尺寸。

例如:
Set1:[16x16,32x32,64x64],
Set2:[12x12,24x24,48x48]。

如果输入图像的大小为32x32,则需要将其调整为16x16,64x64。

代码:

...

DynamicResizeOperation drOp = new DynamicResizeOperation();
IMOperation op = new IMOperation();
op.addImage(inputImagePath);
op.addDynamicOperation(drOp);
op.addImage(); //place holder for out put image

...

for (IMSize imSize : resizeList) {
  //set the dynamic size to resize
  drOp.setSize(imSize.getWidth(), imSize.getHeight());

...


class DynamicResizeOperation implements DynamicOperation {

    private int height;
    private int width;

    public DynamicResizeOperation() {}

    public void setSize(int width, int height) {
        this.height = height;
        this.width = width;
    }

    @Override
    public Operation resolveOperation(Object... pImages) throws IM4JavaException {

        //return the resize operation if and only if both height and width are non zero positive values
        if (height > 0 && width > 0) {
            IMOperation op = new IMOperation();
            op.resize(width, height, "!");
            return op; 
        }
        return null;
    }
}