代码之家  ›  专栏  ›  技术社区  ›  leora Matt Lacey

有用户图片的网页的最佳方式是什么(快速且一致的大小)

  •  1
  • leora Matt Lacey  · 技术社区  · 14 年前

    用户必须登录,我希望允许用户将图片与自己关联,这样我就可以在一些地方将图片显示在人名旁边(类似于facebook的做法)

    我想避免直接将图片存储在数据库中,因为我认为下载会很慢。所以我基本上在“User”表中有一个名为PictureURL的字段,它只是一个字符串。人们可以简单地包括一个图片的任何url,当我想显示图片时,我将只在这个地方使用hrefs。

    一。人们一直在链接不同大小的图片,所以用户界面看起来有点不对劲。

    我正在尝试优化速度和图片大小的一致性。对于这些挑战,我有什么建议吗?

    如何强制用户链接到相同大小的图像? 我应该强制使用某种图像格式吗? 现在我正在使用css调整图像的大小,但是我被告知动态调整大小是一个昂贵而缓慢的操作。我应该只强制一种图像类型吗。我想png会比jpg快,所以我试着把jpg转换成png,但是文件的大小实际上增加到了jpg图像大小的6倍。我想让一个脚本把所有的图片都取下来,然后离线调整它们的大小,然后链接到新图片,但是纵横比都不一样,所以我可以调整大小以获得相同的高度或宽度,但不能两者都是。

    注意:我不能使用gravatar,因为它被阻止了,但我很高兴支持“外包解决方案”

    5 回复  |  直到 14 年前
        1
  •  4
  •   jasper johnz    14 年前

    当你说你允许他们提供一个图片的URL时,你是直接在你的输出中使用这个URL,还是将图片下载到你的服务器,并提供一个本地副本? CSS的大小调整对于客户机来说是很有经验的,而不是对于您的服务器,因为服务器不会对数据进行任何转换,但是客户机需要下载完整大小的图像,然后对其进行大小调整。

    我认为对你来说,一个好的整体解决方案是将每个图像下载到本地服务器,通过一些软件将其大小调整为X,并提供这个本地图像。这可以在系统负载较低时批处理以运行。它还可以让您精确控制哪些图像可以/不能显示,如果这曾经是一个问题。

        2
  •  1
  •   uvita    14 年前

    对于维度问题,我建议您使用两个步骤: 首先,你上传图片并将其存储在一个临时位置。您可以在这里调整图片的大小,保持比例,以使其适合下一步。 然后,在第二步中,您可以使用 JCrop 或任何其他javascript裁剪工具,并强制用户选择图像的正方形区域。用户选择图片区域后,可以创建固定大小的图像缩略图,并将其存储在您喜欢的任何位置(数据库、文件系统、云等)。

    System.Drawing.Image 有一个 GetThumbnailImage

    所以,基本上,我们的想法是在编辑个人资料照片时使用与google相似的方法。如果你有谷歌账户,试试看。

        3
  •  0
  •   John Mee    14 年前

    通常,当图像到达服务器时,您会调整其大小并丢弃原始图像。有些解决方案可以在客户机上调整大小,但它们会给客户机增加额外的要求,例如Adobe Flash。

    一个ASP.NET和缩略图的谷歌会让你开始,不是吗?

    http://dotnetslackers.com/articles/aspnet/Generating-Image-Thumbnails-in-ASP-NET.aspx

        4
  •  0
  •   davehauser    14 年前

    我推荐内森·琼斯 Server-side Image Resizing Module for ASP.NET, ASP, & PHP/IIS . 它很容易使用,比如

    <img src="/Images/12345.jpg?maxWidth=200&maxHeight=200&crop=(0,0,200,200)&format=jpg" alt="" />
    

    当然,要使其正常工作,您需要将原始图像保存在服务器上。

        5
  •  0
  •   Martin    14 年前

    我建议不要只存储图像URL,然后再显示它。很多网站对此表示不满,因为你正在使用他们的带宽来显示图像。很多网站也不允许你这样做,因为带宽问题,然后你会得到一个404返回。