1

我正在处理照片应用程序,我需要一些建议,我应该如何使用Graphics/ImageMagick解决以下问题。GraphicsMagick裁剪:显示将裁剪的内容

  1. 考虑到与分辨率的照片:2048×1536
  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图层裁剪部分进行显示。

我有一个想法,我不太喜欢:从原始图层生成一个图像与阿尔法层,并把裁剪图像与红色边框。它似乎并不是最佳的解决方案:)我的另一个想法是用javafx imageviews来做到这一点,但它似乎并不理想。

注:

  • 我使用im4java与通用汽车。我接受一个命令行的解决方案太(我会弄清楚在im4java张贴;)
  • 我们可以限制只左右水平图像交谈中,我可以找出垂直操作

任何评论都将受到高度赞赏。

回答

0

的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通道播放。

实施例: