如何优化用户上载的图像以及Meteor中服务器上的现有图像

奥格比

目前,我的小组正在运行一个流星应用程序,其中包含成千上万全尺寸很大的图像。我们应该早就这样做了,但是我们需要一种优化它们以帮助加载时间的方法。我正在寻找一种解决方案,当用户从我们的应用程序上载图像时(例如:全尺寸,中型,缩略图),并且能够自动旋转并允许用户旋转,因此能够以多种尺寸保存图像。我们使用Amazon S3托管所有图像。我们还需要一种从服务器端将所有现有图像转换为这些尺寸格式的方法。

我尝试过一段时间实施某项操作,但未成功。我在服务器上设置了imagemagick,但由于将图像临时保存在服务器内存中以进行处理而无法在生产环境中使用它,但是由于内存量有限而导致崩溃。我对这种事情几乎没有经验。

我的第二个想法是使用HTML画布来调整图像的大小。我认为这对新上传的图片有效。但是我仍在寻找一种处理现有图像的方法。

我考虑过:

  • 也许AWS有一种内置的方式来处理它们。我不介意那样做。
  • 某种流星/节点包可以帮助解决这个问题。
  • 设置另一台服务器仅用于处理图像。
  • 使用一些第三方图像处理。

如果有人可以给我一些建议,那么我可以助您一臂之力!

保罗·保林凯(Paul Paulincai)

我看到两种完全不同的预算有两种方式:

  1. 除非您只有1-2 GB,否则我不建议您这样做(https://transloadit.com/demos/file-importing/resize-all-images-in-an-s3-bucket/

  2. 将您的S3链接到Cloudinary服务,然后使用Cloudinary进行转换(您不喜欢它($$)拥有的图像数量)。

  3. 希望在AWS中,您可以使用Cloudfront服务您的资产。无论采用哪种转换技术,您都将主要做两件事:

    • 创建1 Lambda函数以转换S3中所有新创建的资产。我要做的是“监视” S3存储桶,所有新事件触发我的Lambda函数,并在其他2个文件夹中创建资产,最终得到:全分辨率,半分辨率和拇指分辨率。然后在Meteor中将各种尺寸链接到所需的尺寸。最典型的情况是,当您拥有用户个人资料图像时,需要在聊天中将其显示为完整标题,列表或小拇指。
    • 创建1个Lambda Edge(我相信会稍微增加一点$$),然后附加到您的Cloudfront Edge以响应所有呼叫。如果对于当前存储量而言,对于您来说存储成本不是太高,则可以按要求转换图像并替换旧的较大图像,而不是一次执行一次批量运行。

代替Lambda Edge,您可以使用Node设置EC2计算机,并运行一个功能以遍历所有S3资产并进行转换。

无论如何,我觉得您想要做的就是所有AWS,而与您的Meteor无关。还有一件事要做:在上传图片之前先对其进行优化。如果您将React与Meteor一起使用,我可以为您提供必要的组件,否则,我可以为您提供这些组件,然后编写Blaze视图层或您可以使用的其他任何东西。

如果您有兴趣使用这种方法,我可以在基于ImageMagic的生产中使用Lambda转换功能。我还计划“升级”此功能以使用Sharp(如示例中所示),但是暂时它在生产中表现出色,将在我有空的时候切换。检查此示例:

  Download the image from S3, transform, and upload to a different S3 bucket or folder.

  const dstKeyResizedHalf = `p-half/` + imageName
  s3.getObject({
    Bucket: srcBucket,
    Key: srcKey
  }).promise()
    .then(data => Sharp(data.Body)
      .jpeg({
        chromaSubsampling: '4:4:4',
        progressive: true
      })
      .resize(WEB_WIDTH_MAX)
      .toFormat('jpg')
      .toBuffer()
    )
    .then(buffer => s3.putObject({
      Body: buffer,
      Bucket: dstBucket,
      ContentType: 'image/jpg',
      Key: dstKeyResizedHalf,
      CacheControl: 'max-age=864000'
    }).promise())
    .catch(err => callback(err))
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在服务器上现有的图像阵列中添加图像?Xcode

上载到服务器之前优化图像的最佳方法

在上载到iOS上的服务器之前调整图像大小

在上载到android上的ftp服务器时,FTPClient损坏图像吗?

如何从SharePoint服务器检索记录的用户图像?

将从画布获得的图像上载到服务器

上载到服务器之前裁剪图像

Android Studio:如何在上载到服务器之前调整图像大小?

如何在上载到服务器之前调整$ cordovaCapture.captureImage图像的大小?

如何从服务器上载和查看图像文件

如何在现有服务器上安装Landscape?

如何删除PhpStorm上的现有服务器?

如何使用Volley在服务器上上传图像?

如何停止在Apache服务器上缓存图像

如何使用ReactNative在服务器上上传图像

如何在服务器上上传画布图像?

如何在服务器上存储多个图像?

如何在服务器上发布多个图像?

这是将多个图像上传到android中服务器的最佳方法

在服务器上发送图像数组?

在服务器上上传图像

使用节点在服务器上进行图像优化

Kendo网格列以及来自服务器的图像

iOS上的Safari无法Ajax上载某些图像文件:“无法连接到服务器”(但网站正常)

如果Android中的服务器上没有图像,则显示默认图像

Golang S3没有找到文件并且服务器在上载图像时出现了恐慌

如何优化用于图像解码的Delphi代码?

如何使用Microsoft Sync Framework仅将新项目上载到服务器而不更新/删除现有项目

如何从具有图像URL列表的服务器从JSON中的GridView中加载图像