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

實施例: