【问题标题】:Magick++: Fit image to sizeMagick ++:使图像适合大小
【发布时间】:2013-12-21 10:51:46
【问题描述】:

如何使图像适合精确尺寸?我不想扭曲图像,我需要将它放在黑色背景上,并且无论是从一侧到另一侧还是从上到下都需要居中。它们最初是大图像,我需要将其缩小到 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"));
  }
}

我必须相信有一种更简单/更好的方法可以做到这一点,同时还可以将其安装到 25 像素宽 x 32 像素高的画布上,图像位于中心。我该怎么做?

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

【问题讨论】:

    标签: imagemagick magick++


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-09
      • 2015-07-30
      • 1970-01-01
      • 1970-01-01
      • 2013-11-22
      相关资源
      最近更新 更多