如何使用CollectionFS和GraphicsMagick在Meteor中创建填充特定区域的缩略图

4

目前我正在使用这里的代码:https://github.com/CollectionFS/Meteor-CollectionFS#basic-example

假设我想要一个100x100的缩略图。

但是,如果我的图片尺寸是400x200,上面的代码将生成一个100x50的缩略图。

在这个例子中,我希望发生的是将图像调整为200x100,然后剪裁为100x100。如何实现?如何获取高度和宽度?我知道可以使用gm的size函数,但我无法理解所有回调。

1个回答

6

尝试:

gm(readStream, fileObj.name()).autoOrient().resize('100', '100', "^").gravity('Center').extent('100', '100').stream().pipe(writeStream);

autoOrient() 会自动将任何手机照片旋转到正确的方向(否则它们有时会侧着拍摄)。传递给 resize^ 是一个选项,使您的图像的“最小边缘”调整为 100。因此,这将在“正确”的边缘留下“悬挂”。它可以处理您的图像非常宽或非常高的情况。然后,extent 裁剪图像,移除过度。 gravity('Center') 使 extent 的裁剪效果发生在图像的中心。

我仍然没有弄清楚的唯一一件事是如何从图像的中心裁剪。根据大多数示例,调用 gravity('center') 应该可以做到这一点,但对我来说却不起作用。它总是从角落裁剪。它正在工作,只是看起来不太好,因为大多数主题都在图像的中心。

编辑:调用gravity需要使用'Center',而不是'center'。现在该调用可以正常工作了。还添加了autoOrient()调用。 这里是官方gm文档,其中解释了选项。但是,为了弄清上述语法,需要在node.js中进行研究。

谢谢。这是一个很大的进步。目前我没有这方面的需求。我只是用CSS缩放了图像,虽然不是理想的解决方案,但它可以工作。不过我会在我的下一个项目中测试这个方法。因为我发布问题已经有一段时间了,所以现在我将把它标记为正确答案。希望有人能帮助我们完成最后一部分拼图。再次感谢。 - Jared Martin
我找到了错误。它需要大写字母C的“'Center'”。现在它可以正确地从中心裁剪! - evolross
还发现了autoOrient()命令,可以正确地调整手机(和其他类型)照片的方向。认为这也会很有用。 - evolross
非常好的答案,省了我很多时间。谢谢。 - theduke
非常感谢!你今天拯救了我的理智 :D - Arrowcatch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接