im4Java - Динамическая операция для изменения размера

Я использую библиотеку im4Java для изменения размера моих изображений. Я вижу, вы можете настроить шаблонную операцию, которая имеет заполнитель для входных и выходных файлов. Я знаю, что вы можете изначально установить размеры для операции, но можно ли настроить операцию, чтобы размеры были также динамическими?

Это мой текущий код:

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

1 ответ

Вы можете реализовать интерфейс 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;
    }
}
Другие вопросы по тегам