如何将图像拟合到精确尺寸?我不想扭曲图像,我需要将它放在黑色背景上,无论是从一侧到另一侧还是从上到下,它都需要居中。它们原本是大型图像,我需要将其扩展到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个像素。这是我假设图像适合照顾的东西。我只是不知道如何。
答案 0 :(得分:0)
我相信评估图像列和&行可能是不必要的。 Magick::Geometry支持其他限定符,例如(>
)“仅在图片较大时调整大小”和(^
)“裁剪/填充尺寸”< / em>的。如果需要,您应该能够使用限定符的组合来调整图像大小,并使图像适合。
img.resize(Magick::Geometry("25x32>^"));
img.extent(Magick::Geometry("25x32"),Magick::CenterGravity);
当然,您也可以在extent
方法中应用限定符。我建议您使用convert
实用程序和example文档进行实验。