PNG、GIF、JPEG、SVG 有哪些不同的用例? [关闭]

2024-03-09

在构建网站或界面等时何时应使用某些图像文件类型?

他们的优点和缺点是什么?

我知道PNG和GIF是无损的,而JPEG是有损的。
但 PNG 和 GIF 之间的主要区别是什么?
为什么我应该选择其中一种而不是另一种? 什么是 SVG?什么时候应该使用它?

如果您不关心每个像素,您是否应该始终使用 JPEG,因为它是“最轻”的像素?


您应该了解几个关键因素...

首先,压缩有两种类型:Lossless http://en.wikipedia.org/wiki/Lossless_data_compression and Lossy http://en.wikipedia.org/wiki/Lossy_compression.

  • Lossless意味着图像变小,但不影响质量。
  • Lossy意味着图像变得(甚至)更小,但会损害质量。如果您一遍又一遍地以有损格式保存图像,图像质量会变得越来越差。

还有不同的颜色深度(调色板):索引颜色 http://en.wikipedia.org/wiki/Indexed_color and 直接上色 http://en.wikipedia.org/wiki/Color_depth#Direct_color.

  • Indexed意味着图像只能存储由作者控制的有限数量的颜色(通常为 256 种),称为颜色图
  • Direct意味着你可以存储很多数千并非作者直接选择的颜色

BMP- 无损/索引和直接

这是一种旧格式。它是无损的(保存时不会丢失图像数据),但也几乎没有压缩,这意味着保存为 BMP 会导致文件大小非常大。它可以同时具有索引和直接调色板,但这只是一个小小的安慰。文件大小太大,以至于没有人真正使用这种格式。

适合:没什么好处。 BMP 没有什么擅长的,也没有其他格式做得更好的。


GIF- 无损/仅索引

GIF 使用无损压缩,这意味着您可以反复保存图像而不会丢失任何数据。文件大小比 BMP 小得多,因为实际上使用了良好的压缩,但它只能存储索引调色板。这意味着对于大多数用例 https://webmasters.stackexchange.com/a/39904/7654,文件中最多只能有 256 种不同的颜色。这听起来像是一个很小的数额,确实如此。

GIF 图像也可以是动画的并且具有透明度。

适合:徽标、线条图和其他需要较小的简单图像。仅真正用于网站。


JPEG- 有损/直接

JPEG 图像旨在通过删除人眼不会注意到的信息来使详细的摄影图像尽可能小。因此,它是一种有损格式,并且一遍又一遍地保存同一文件将导致随着时间的推移丢失更多数据。它有数千种颜色的调色板,因此非常适合照片,但有损压缩意味着它对徽标和线条图不利:它们不仅看起来模糊,而且与 GIF 相比,此类图像的文件大小也更大!

适合:照片。还有渐变。


PNG-8- 无损/索引

PNG 是一种较新的格式,PNG-8(PNG 的索引版本)确实是 GIF 的良好替代品。然而遗憾的是,它有一些缺点:首先,它不能像 GIF 那样支持动画(它可以,但似乎只有 Firefox 支持它,不像 GIF 动画,每个浏览器都支持)。其次,它对 IE6 等旧版浏览器存在一些支持问题。第三,像Photoshop这样的重要软件对格式的实现很差。 (该死的 Adob​​e!)PNG-8 只能存储 256 种颜色,就像 GIF 一样。

优点:PNG-8 比 GIF 更好的主要特点是支持 Alpha 透明度。


PNG-24- 无损/直接

PNG-24 是一种出色的格式,它将无损编码与直接颜色(数千种颜色,就像 JPEG 一样)相结合。在这方面,它与 BMP 非常相似,只是 PNG 实际上压缩了图像,因此它会生成更小的文件。不幸的是,PNG-24 文件仍然比 JPEG(用于照片)和 GIF/PNG-8(用于徽标和图形)大,因此您仍然需要考虑是否真的想使用它。

尽管 PNG-24 在压缩的同时允许数千种颜色,但它们并不是要取代 JPEG 图像。保存为 PNG-24 的照片可能比同等的 JPEG 图像至少大 5 倍,而可见质量几乎没有改善。 (当然,如果您不关心文件大小并且希望获得最佳质量的图像,这可能是理想的结果。)

就像 PNG-8 一样,PNG-24 也支持 alpha 透明度。


SVG- 无损/矢量

目前越来越流行的一种文件类型是 SVG,它与上述所有文件类型的不同之处在于它是vector https://en.wikipedia.org/wiki/Vector_graphics文件格式(以上均为raster https://en.wikipedia.org/wiki/Raster_graphics)。这意味着它实际上由直线和曲线而不是像素组成。当您放大矢量图像时,您仍然会看到一条曲线或一条直线。当您放大光栅图像时,您将看到像素。

例如:

这意味着 SVG 非常适合您希望在 Retina 屏幕上或不同尺寸下保持清晰度的徽标和图标。这也意味着一个小的 SVG 徽标可以在更大的尺寸下使用,而不会降低图像质量——这需要一个单独的更大(就文件大小而言)的光栅格式文件。

SVG 文件大小通常很小,即使它们在视觉上非常大,这很棒。然而,值得记住的是,它确实取决于所使用形状的复杂性。 SVG 比光栅图像需要更多的计算能力,因为绘制曲线和直线时涉及数学计算。如果您的徽标特别复杂,它可能会降低用户计算机的速度,甚至文件大小会非常大。尽可能简化矢量形状非常重要。

此外,SVG 文件是用 XML 编写的,因此可以在文本编辑器中打开和编辑(!)。这意味着它的值可以动态操纵。例如,您可以使用 JavaScript 更改网站上 SVG 图标的颜色,就像更改某些文本一样(即不需要第二个图像),甚至可以为它们设置动画。

总而言之,它们最适合简单的平面形状,例如徽标或图形。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PNG、GIF、JPEG、SVG 有哪些不同的用例? [关闭] 的相关文章

  • 从 imread 返回的 ndims

    我正在从文件夹中选取图像 尺寸为128 128 为此 我使用以下代码行 FileName PathName uigetfile jpg Select the Cover Image file fullfile PathName FileNa
  • SVG 捕获鼠标坐标

    我知道之前已经有人问过有关 svg 鼠标坐标的问题 但我对我当前遇到的行为感到非常困惑 而且似乎没有一个线程能够解决它 我用于捕获坐标的方法 var pt svg createSVGPoint Created once for docume
  • 从 JavaScript 重新启动动画 GIF,无需重新加载图像

    我正在使用动画 GIF 创建动画幻灯片 我正在从一个动画淡入淡出到下一个动画 问题是 我发现确保 GIF 从第一帧开始动画的唯一方法是每次显示时重新加载它 每个 GIF 大约 200KB 这对于连续幻灯片播放来说带宽太大了 这是我当前的代码
  • Javascript图像编辑插件

    在哪里可以找到 Javascript 或 jQuery 图像编辑器插件 用户可以单击图像进行编辑 并且该插件允许他们进行裁剪 调整大小 旋转 翻转等 Pixastic http pixastic com lib 不再活跃 和CamanJS
  • 使用 scikit-image 和 Transform.PolynomialTransform 进行图像变形

    我附上一个压缩档案 https drive google com file d 0B6EnJ Vh6zs1MkVCRlNhZkJsOEk view usp sharing包含说明和重现问题所需的所有文件 我还没有上传图片的权限 我有一个带有
  • 如何在Google机器学习中将jpeg图像转换为json文件

    我正在研究 Google Cloud ML 我想对 jpeg 图像进行预测 为此 我想使用 gcloud beta ml 预测 instances INSTANCES model MODEL version VERSION https cl
  • JS - 如何将图像对象变成灰度并显示它

    基本上 当单击按钮时 它会告诉移动设备转到相机 一旦相机拍照 它就会给我图像数据 它被称为数据 URL 吗 这是我处理它的代码 var imagesrc data image jpeg base64 imageData var myimag
  • 了解客户端文件的对象 URL 以及如何释放内存

    我在用createObjectURL获取本地图像文件的引用 URL 当我完成文件 图像后 我打电话revokeObjectURL释放该内存 一切对我来说都很好 但我只是想确保我释放了我能释放的所有内存 我检查后出现了我的担忧chrome b
  • DICOM 和 DICOM 叠加问题

    我有一个 DICOM 图像 我正在使用 C 读取该图像并将其转换为 16 位位图 位图已创建 但图像具有 DICOM 覆盖 我想在创建最终的 dicom 位图时将叠加层刻录到位图中 我无法做到这一点 有什么帮助吗 一种方法是创建覆盖数据的位
  • 在 Swift 中将 gif 保存到 iOS 照片库

    我正在尝试保存位于已使用 Regift 代码创建的临时文件中的 GIF 图像 Regift https github com matthewpalmer Regift https github com matthewpalmer Regif
  • 如何使用 Selenium webdriver 测试对 SVG 对象的点击?

    我正在尝试编写代码来检查单击 SVG 对象的功能 例如此 URL 上的美国州 http www amcharts com svg maps map usa 这可行 但是有更好的方法吗 不需要物理移动鼠标的东西 robert new Robo
  • 如何使用 jquery imgAreaSelect 用 php 裁剪图像?

    我正在使用以下 javascript 代码来实例化 jquery图像区域选择 http odyniec net projects imgareaselect 裁剪我的图像 document ready function ladybug im
  • 仅获取图像中的外部轮廓

    我有这段代码 可以在图像中绘制轮廓 但我只需要外部轮廓 import cv2 import numpy as np camino C Users Usuario Documents Deteccion de Objetos 123 jpg
  • 使用 PHP 将 SVG 图像转换为 PNG

    我正在开发一个网络项目 该项目涉及动态生成的美国地图 根据一组数据为不同的州着色 这个 SVG 文件为我提供了一张很好的美国空白地图 并且很容易更改每个州的颜色 困难在于 IE 浏览器不支持 SVG 因此为了让我使用 svg 提供的便捷语法
  • 自定义 SVG 未加载到我的图像标签中

    目前我正在尝试将自定义 svg 组件加载到图像标签内 但由于某种原因 我无法看到地图组件内的 svg 图像 我的自定义 SVG 文件如下所示 我在 SVG 中加载另一个图像
  • SVG 文本无法在 Chrome 或 Safari 中呈现

    我有一些 SVG 文本在 Firefox 上运行良好 但在 Chrome 和 Safari 中却没有出现 我努力了 向 svg 容器添加填充 以防文本被隔断 从文本中删除 xml space preserve 添加内联填充颜色
  • 在 Java 中使用 Batik 检查和删除 SVG 中的属性

    这个问题基本上说明了一切 如何检查 SVG 是否具有 viewBox 属性 我正在使用蜡染库 我需要这个 因为我需要 至少 通知用户有一个 viewBox 属性 我可以删除它吗 使用 org w3c dom 类 您可以按照以下方式做一些事情
  • 使用 ImageMagick/convert 创建半透明 PNG

    我有 PNG 文件 我想将整个图像转换为半透明 该图像将在 KML 文件中引用为 Google 地球 地图中使用的图标叠加层 使用 ImageMagick 向我建议了以下示例convert命令 但似乎都不起作用 第一个示例会导致错误 usr
  • JavaFX:将像素写入 PixelWriter 的最快方法

    我正在寻找最快的方式来写入像素javafx scene image Image 写信给BufferedImage的后备数组要快得多 至少在我制作的测试图像上 只花了大约 20 毫秒BufferedImage WritableImage另一方
  • iPhone JPG 图像有非标准魔术字节 ff d8 ff e1?

    我的网络应用程序在接受上传的图像之前会根据文件扩展名检查前四个字节 一位同事向我展示了他 iPhone 上的图像 但这些图像被拒绝了 它们具有不同的第四个字节 e1 225 而不是预期的 e0 224 这对于 iPhone 来说是常见的吗

随机推荐

  • 面板数据中汇总回归模型的模型预测

    我正在尝试生成一个预测模型 在该模型中 我每年都会进行多次汇总回归 基于前几年 从而允许系数随时间变化 这在提供的示例数据中可能没有意义 但在我的示例中实际上是这样做的 这是我到目前为止的想法 我将代码调整为 plm 包中的可重现示例 数据
  • 不同文化信息之间的日期时间转换

    我想在国家 地区之间创建不同的转换 并且我正在使用 C 我正在尝试将日期时间转换为另一个日期时间 格式为 dd mmm yyyy CultureInfo ci CultureInfo CreateSpecificCulture langua
  • seq2seq 中的 TimeDistributed(Dense) 与 Dense

    鉴于下面的代码 encoder inputs Input shape 16 70 encoder LSTM latent dim return state True encoder outputs state h state c encod
  • 在 Maven 中设置注释处理器生成的源目录

    我正在尝试将使用注释处理器生成源的构建移动到 Maven 我尝试按如下方式配置 maven compiler plugin
  • Angular6 - 读取文本/纯文本的响应正文

    我正在执行注册操作 当用户成功注册时 我会在后端返回他的 ID 例如 105 当注册失败 用户已存在 时 我返回 USER EXISTS 我已经在 Postman 上检查了请求 响应正文是正确的 在这两种情况下 我都会返回 纯文本 文本 但
  • Django 双向ManyToMany - 如何防止在第二个模型上创建表?

    我有两个模型 每个模型都有一个共享的 ManyToMany 使用 db table 字段 但是如何防止syncdb 尝试为第二个模型创建共享表呢 class Model1 models Model othermodels ManyToMan
  • 您可以使用 Spark SQL/Hive/Presto 直接从 Parquet/S3 复制到 Redshift 吗?

    我们有大量的服务器数据存储在S3 很快将在Parquet格式 数据需要进行一些转换 因此它不能直接从 S3 复制 我将使用Spark访问数据 但我想知道是否可以跳过一个步骤并运行查询来提取 转换数据 然后复制它 而不是使用 Spark 操作
  • 如何将一个 xhtml 文档中的 div 部分提取到另一个 xhtml 文档中

    我正在尝试使用 xslt 将一个 xhtml 文档中的 div 部分提取到另一个 xhtml 文档中 然而 我没有成功 相反 xslt 转换产生了有线输出 假设要转换以下xhtml文档 some blabla div div class t
  • 无损分解与依赖关系保留

    其中任何一个都暗示另一个吗 我的逻辑是 如果保留所有依赖关系 则不会丢失信息 同样 如果分解是无损的 则一定不会违反功能依赖关系 因此本质上 依赖关系保存是确保分解无损的一种方法 我很难接受 否认它 那么这两者是否可以相互保证 或者是否存在
  • 如何从 URL 中排除单词或字符串 - 正则表达式

    我使用以下正则表达式来匹配 PHP 中的所有类型的 URL 效果非常好 reg exUrl b w www s lt gt w d punct s s 但现在 我想排除 Youtube youtu be 和 Vimeo URL 经过研究后我
  • 如何在实体框架中获取 SQL Server 序列的下一个值?

    我想使用 SQL Serversequence objects http msdn microsoft com en IN library ff878091 aspx在实体框架中显示编号规则 然后将其保存到数据库中 在当前场景中 我正在通过
  • 使用 Hotmail smtp 在 PHP 中发送邮件

    我正在尝试使用 Hotmail Smtp 以 PHP 发送邮件 但我收到如下错误 2014 03 13 06 59 01 CLIENT gt SERVER EHLO site com 2014 03 13 06 59 01 CLIENT g
  • 将数学表达式与正则表达式匹配?

    例如 这些是有效的数学表达式 a b c a b 1 50 apple 0 5 boy 1 这些是无效的数学表达式 a b 1 5 0 two consecutive signs two consecutive operators inva
  • 如何使元素对点击透明但仍然可见?

    我有兴趣在 iframe 之类的东西上放置一个嵌入框阴影 虽然将 div 覆盖在 iframe 上的策略可以提供预期的视觉显示 但 div 随后会阻止 iframe 本身上的点击 Sample http jsfiddle net YqXPg
  • GroupBy 列标题前缀上的列

    我有一个数据框 其列名以一组前缀列表开头 我想获取数据框中按以相同前缀开头的列分组的值的总和 df pd DataFrame 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 columns abc abd wxy wxz p
  • 无窗托盘图标应用程序

    好吧 我是 WPF 的新手 但我必须使用 wpf 开发标题中的内容 但不依赖 MVVM 我已经遵循了这个 仅具有托盘图标的 WPF 应用程序 https stackoverflow com questions 1472633 wpf app
  • 消除subst来证明平等

    我试图将 mod n 计数器表示为间隔的一部分 0 n 1 分为两部分 data Counter Set where cut i j Counter suc i j 使用它 定义两个关键操作很简单 为简洁起见 省略了一些证明 1 n Cou
  • 实现 AVAssetDownloadURLSession 下载 HLS 流时出错

    我正在尝试为流应用程序实现离线模式 目标是能够在用户的设备上下载 HLS 流 以便即使用户离线时也可以观看流 我最近偶然发现本教程 https developer apple com library content documentatio
  • Angular2-捕获错误并将其显示在视图中

    我有一个执行 get 请求并抛出错误的服务 服务 ts return this http get apiUrl map response Response gt const items response json return items
  • PNG、GIF、JPEG、SVG 有哪些不同的用例? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在构建网站或界面等时何时应使用某些图像文件类型 他们的优点和缺点是什么 我知道PNG和GIF是无损的 而JPEG是有损的 但 PNG