【问题标题】:GraphicsMagick crop: shows what will be croppedGraphicsMagick 裁剪:显示将被裁剪的内容
【发布时间】:2013-11-15 15:09:13
【问题描述】:

我正在开发一个照片应用程序,我需要一些建议,我应该如何使用 Graphics/ImageMagick 解决以下问题。

  1. 给定一张分辨率为:2048x1536 的照片
  2. 给定一个指定的分辨率:1864x1228
  3. 调整图像大小并用图像填充指定的分辨率(现在是 1864x1398)
  4. 突出显示原始图像的区域将被裁剪(至 1864x1228)

我有一个可行的解决方案,可以正确调整图像大小和裁剪图像:

IMOperation resizeOp = new IMOperation();
resizeOp.addImage();
resizeOp.resize(MAX_WIDTH, MAX_HEIGHT, "^");
resizeOp.gravity("center"); //centered image with crop the top/bottom parts
resizeOp.crop(MAX_WIDTH, MAX_HEIGHT, 0, 0);
resizeOp.addImage();

ConvertCmd cmd = new ConvertCmd(true);
cmd.run(resizeOp, fileName, outputFileName); //cropped, center filled image (1864x1228)

问题是我应该如何执行以下操作:显示完整图像而不是裁剪版本,并突出显示将被裁剪的图像区域。我更喜欢在裁剪后的图像周围使用红色边框,并使用带有 alpha 层的裁剪部分显示。

我有一个我不太喜欢的想法:从原始图像生成一个带有 alpha 层的图像,并将裁剪后的图像放在上面,并带有红色边框。这似乎不是最佳解决方案 :) 我的另一个想法是使用 javafx imageviews 执行此操作,但它似乎也不是最佳解决方案。

注意事项:

  • 我正在使用带有 GM 的 im4java。我也接受命令行解决方案(我会弄清楚并将其发布在 im4java 中;)
  • 我们可以限制只讨论水平图像,我可以弄清楚垂直操作

任何 cmets 将不胜感激。

【问题讨论】:

    标签: imagemagick javafx-2 image-manipulation graphicsmagick im4java


    【解决方案1】:

    oneliner imagemagick 转换(删除换行符):

        convert ( in.jpg -resize 1864x1228^ -fill white -colorize 50% )
                ( in.jpg -resize 1864x1228^ -gravity center -crop 1864x1228+0+0 )
                -gravity center -composite out.jpg
    

    在 bash 中,您必须使用 \ 转义 () 字符!

    我在 im4java 中通过子操作解决了它:

        IMOperation op = new IMOperation();
    
        op.openOperation();
        op.addImage(); //input image
        op.resize(MAX_WIDTH, MAX_HEIGHT, "^");
        op.fill("white");
        op.colorize(50);
        op.closeOperation();
    
        op.openOperation();
        op.addImage(); //input image
        op.resize(MAX_WIDTH, MAX_HEIGHT, "^");
        op.gravity(GRAVITY_OPT_CENTER); //centered image with crop the top/bottom parts
        op.crop(MAX_WIDTH, MAX_HEIGHT, 0, 0);
        op.closeOperation();
    
        op.gravity(GRAVITY_OPT_CENTER);
        op.composite();
        op.addImage(); // output image
    

    注意事项:

    • 它仍然不包含红色边框(我无法添加边框仅添加到第二张图片)。
    • 我决定使用“淡入白”效果,而不是使用 Alpha 通道。

    例子:

    【讨论】:

      猜你喜欢
      • 2015-07-07
      • 2016-11-23
      • 1970-01-01
      • 2016-07-26
      • 1970-01-01
      • 2016-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多