Magick ++:使图像适合大小

时间:2013-12-21 10:51:46

标签: imagemagick magick++

如何将图像拟合到精确尺寸?我不想扭曲图像,我需要将它放在黑色背景上,无论是从一侧到另一侧还是从上到下,它都需要居中。它们原本是大型图像,我需要将其扩展到25px宽,32px高。

现在我只是检查宽度和高度,找出需要调整大小的内容:

InitializeMagick(*argv);
Image img(imgFilename);
// Check image dimensions
if (img.columns() > img.rows()) {
  // wide image!
  if (img.columns() > 25) {
    img.resize(Magick::Geometry("25x"));
  }
} else {
  // tall image!
  if (img.rows() > 32) {
    img.resize(Magick::Geometry("x32"));
  }
}

我必须相信有一种更简单/更好的方法,同时也适用于25px宽32px高的画布,图像位于中央。我该怎么做?

顺便说一下,我意识到上面的代码存在问题...如果img.columns()== img.rows()它总是进入第二种情况并将图像大小调整为32高而不是因为这会导致img.columns()也转到32,这超出了所需的25个像素。这是我假设图像适合照顾的东西。我只是不知道如何。

1 个答案:

答案 0 :(得分:0)

我相信评估图像列和&amp;行可能是不必要的。 Magick::Geometry支持其他限定符,例如(>“仅在图片较大时调整大小”和(^“裁剪/填充尺寸”< / em>的。如果需要,您应该能够使用限定符的组合来调整图像大小,并使图像适合。

img.resize(Magick::Geometry("25x32>^"));
img.extent(Magick::Geometry("25x32"),Magick::CenterGravity);

当然,您也可以在extent方法中应用限定符。我建议您使用convert实用程序和example文档进行实验。