1

如何使图像适合精确尺寸?我不想扭曲图像,我需要将它放在黑色背景上,并且无论是从一侧到另一侧还是从上到下都需要居中。它们最初是大图像,我需要将其缩小到 25px 宽 x 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 宽 x 32px 高的画布上,图像在中心。我怎么做?

顺便说一句,我意识到上面的代码有问题......如果 img.columns() == img.rows() 它总是转到第二种情况并将图像大小调整为 32 高,这是不正确的将导致 img.columns() 也变为 32,这超出了所需的 25 像素。这是我假设图像适合会处理的事情。我只是不知道怎么做。

4

1 回答 1

0

我相信评估图像列和行可能是不必要的。Magick::Geometry支持额外的限定符,如 ( >) “仅在图像更大时调整大小”和 ( ^) “裁剪/填充到大小”。如果需要,您应该能够使用限定符的组合来调整图像大小,并扩展图像以适应。

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

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

于 2013-12-23T17:04:12.513 回答