【问题标题】:How do I resize high-res photos to thumbnails?如何将高分辨率照片调整为缩略图?
【发布时间】:2011-05-28 08:58:33
【问题描述】:

我有一个用户可以上传照片的网站。我不知道如何处理照片。要从大分辨率照片中制作缩略图,我是否只需调整宽度和高度?或者有更好的方法吗?

如果您能指出我的任何资源或给我任何提示,那就太好了。

如果这很重要,我正在使用 Ruby on Rails。我真的不想要宝石,因为我想自己学习如何做。

【问题讨论】:

  • “我可能想知道的关于图像的所有信息”都不适合一本书,更不用说 SO 问题了。
  • 标题还算不错,但问题更具体。
  • 试试 Paperclip Gem,你会感谢我提到的。

标签: ruby-on-rails ruby image image-manipulation ruby-on-rails-3


【解决方案1】:

对于其中的一些,“学习如何自己做”将是一项重大的任务。例如,调整图像大小。继续寻找一个可以调整图像大小并查看其源代码的开源库(例如 gem)。自己做也不是不可能,但很多这类事情都是建立在以前的专业知识之上的,等等。使用别人创造的工具没有错,只要你了解工具是什么正在做。

希望对您有所帮助的几点:

  1. 对您支持的图像格式采用白名单方法。不要只让用户上传他们称之为图片的任何内容。
  2. 您支持的每种格式都有自己的元数据标准(可能有多个标准)。剥离数据批发可能是一个好主意,也可能不是一个好主意。例如,jpeg 可能在其 EXIF 数据中包含其方向,如果将其剥离,则可能会有效地旋转图像。为了保护用户的隐私等,您可能希望去掉某些字段,例如地理标记。同样,请查看现有的库,看看他们是如何做到的。
  3. 不要隐式信任文件扩展名来确定图像的类型。用户有可能构建一个并非真正图像的恶意文件,将其作为图像传递给毫无戒心的主机,并在该主机尝试将文件作为图像处理时有效地打开该主机上的安全漏洞。有一个关于在 Ruby here 中确定文件类型的问题,我相信还有很多关于这个主题的内容。

【讨论】:

  • 谢谢。信息量很大。上传文件时的部分参数是内容类型。例如,它显示“@content_type="image/jpeg"”。这不靠谱?
  • @GreenRails:它应该是可靠的,但在验证用户输入时我倾向于偏执。我确定还有其他人,但这里有一个关于这个主题的 .NET 讨论:forums.asp.net/t/1331793.aspx
【解决方案2】:

大卫很好地回答了这个问题,但我想我可以提供一些关于你的问题的更具体的信息。

将 Paperclip gem 与 RMagick(Ruby 的 ImageMagick 包装器)结合使用。您可以设置后处理选项并创建多个调整大小。

如果您真的想自己做,请在https://github.com/thoughtbot/paperclip 上查看实际的 gem,您会看到作者是如何做到的。 Ruby on Rails 背后的部分思想是 DRTW(不要重新发明轮子)。利用现有的东西并以此为基础。从长远来看,这将节省您的时间,并使您能够做更多的事情。

【讨论】:

    【解决方案3】:

    另一种方法是使用第三方服务,例如http://resizer.co(我不隶属)

    将网址替换为您网站上的图片,例如:

    http://example.com/images/abc123.jpg
    

    使用以下内容(对于 200 x 200 图像)

    http://www.resizer.co?image=http://example.com/images/abc123.jpg&w=200&h=200
    

    您可能会遇到失真和未保持“纵横比”的问题,但这可能是一个好的开始。

    【讨论】:

      猜你喜欢
      • 2017-11-25
      • 1970-01-01
      • 2014-05-26
      • 2013-02-27
      • 1970-01-01
      • 2013-06-08
      • 2011-06-12
      • 2018-01-14
      • 1970-01-01
      相关资源
      最近更新 更多