在 PHP 中压缩 GIF 图像质量?

2023-12-27

如何在 PHP5 中压缩 GIF 图像文件?

我知道可以像这样使用 JPG imagejpeg($resource, $filename, $quality) 根据http://us.php.net/manual/en/function.imagejpeg.php http://us.php.net/manual/en/function.imagejpeg.php


Gif 肯定是有损的,而且你绝对可以压缩它们——相当显着。这是 PHP 代码:

$img = imagecreatefromstring(file_get_contents($_FILES["my_field"]["tmp_name"]));
imagetruecolortopalette($img, false, 16);  //  compress to 16 colors in gif palette (change 16 to anything between 1-256)
imagegif($img, $destination_filename);  //  $destination_filename is the location on your server where you want to save the compressed gif file

感谢马里奥,从这个链接上面的第一行:在 PHP 中将 JPG/GIF 图像转换为 PNG? https://stackoverflow.com/questions/8550015/convert-jpg-gif-image-to-png-in-php

许多人声称 gif 是无损的,这是不正确的。 GIF 肯定会丢失数据。丢失发生在保存时,而不是打开文件时,并且 gif 丢失与 jpeg 丢失的行为不同,这就是人们感到困惑的地方。一点点道理也可以告诉我们,几乎所有不是位图的图像类型确实是有损的,否则我们最好只使用位图。除了基本的理解之外,图像压缩并不是所有这些专家“博主”所提倡的精确科学,程序员最好自己深入研究数据格式和压缩算法(双关语)。

本文http://searchcio-midmarket.techtarget.com/definition/lossless-and-lossy-compression http://searchcio-midmarket.techtarget.com/definition/lossless-and-lossy-compression平淡地和falsely声明“图形交换文件 (GIF) 是一种在 Web 上使用的提供无损压缩的图像格式”。这就像说“所有矩形都是正方形”。有些矩形肯定是正方形,但从逻辑上来说,这种说法是 100% 错误的。如果您有黑白图像,当然可以使用无损 gif 图像,但 gif 绝不是“无损”。此外,以 100% 质量保存 jpeg 文件也是无损的,但可能会创建比原始文件更大的文件。

作为一个非常简单的规则:为了高速传输,请使用带有小调色板的 gif 来获取高对比度图像(例如白色桌子上的黑色笔记本的图像);在对比度非常低的图像(例如森林图像)上使用 50%-70% 之间的 jpeg;并在中等对比度或混合对比度图像(例如您和您朋友的图像)上使用大调色板的 gif 或质量为 63%-85% 的 jpeg。

LZW 压缩(对于 Tiff 文件)是惊人的,但请记住,压缩图像并最终得到一个翻译字典,除了压缩数据本身之外,它还比原始图像更大。图像压缩非常复杂,没有一种方法适合所有情况,因此在讨论图像压缩时避免笼统的陈述。没有“正确”的选择,只有更好的选择。

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

在 PHP 中压缩 GIF 图像质量? 的相关文章

  • 如何使用 WebAPI 处理图像

    问题 将图像发布 获取到我的服务有哪些不同的方法 我想我可以在 JSON 中使用 Base 64 文本 也可以保持原生二进制形式 我的理解是 通过将图像转换为文本 包大小会显着增加 如果我发送图像 从 Web 表单 从本机客户端 从另一个服
  • 包括 PHPUnit 在内的麻烦

    我想开始为我的代码编写测试 因此我使用以下命令安装了最新的 PHPUnit wget http pear phpunit de get phpunit phar chmod x phpunit phar mv phpunit phar us
  • PHP、jQuery Ajax 和 json 跨域返回

    我的 php 编码页面位于一台返回 json 结果的服务器上 php 文件名为 getInfoData php 返回如下 echo json encode v 不 我可以使用 getJSON 读取 json 并在同一服务器上运行它 但我需要
  • 使用factory faker创建的图像在存储在storage/public/images文件夹中时会被删除

    我正在尝试用假图像填充我的数据库 但是当 faker 将其保存到我的图像文件夹中时 一秒钟后它被删除 并且在我的数据库字段中我得到 0 我可以访问http lorempixel com http lorempixel com 也可以 pin
  • 是否可以在通过表单上传本地图像之前预览它们?

    更具体地说 我想使用一种带有一个或多个用于图像的文件输入字段的表单 当这些字段发生更改时 我想在将数据发送到服务器之前显示关联图像的预览 我尝试过多种 JavaScript 方法 但总是遇到安全错误 我不介意使用 java 或 flash
  • 简单的 preg_replace 返回 null

    为什么这个非常简单的 preg replace 返回 null preg replace s test test 这个想法是删除空格 您忘记添加分隔符 preg replace s test test 而且最好使用 s 代替 s 在你的模式
  • 需要有关使用 PHP 在 mysql 数据库中插入逗号分隔数据的帮助

    数据库表中已有的演示数据 INSERT INTO csvtbl ID SKU Product Name Model Make Year From Year To VALUES 1 C2AZ 3B584 AR Power Steering P
  • 如何将日期/时间从 24 小时格式转换为 12 小时 AM/PM? [复制]

    这个问题在这里已经有答案了 我从数据源中获取以下格式的日期和时间 19 24 15 06 13 2013 我需要将其转换为 12 小时 AM PM 格式 不带秒 所以上面的时间是晚上 7 24 日期应保留为 mm dd yyyy 格式 在
  • PHP 中的异步数据库/服务调用:Gearman 与 pthreads

    在我们的 LAMP 站点上 我们遇到一些服务必须多次调用数据库才能提取数据的问题 通常在 PHP 中完成此操作的方式 至少我的经验 是串行的 这显然是低效的 我们可以通过使用缓存和聚合一些查询来缓解一些低效率的问题 但在某些情况下我们仍然需
  • 验证数据库匹配中的 $_GET id 是否足够安全?

    我的网站上有 2 个页面 一个是 index php 索引页面列出了数据库中存在的所有帖子 另一个页面是 post php 当单击索引页面上的特定帖子时 帖子页面显示单个帖子 现在我用来列出 index php 上所有帖子的代码是 post
  • 登录代码示例已通过 SQL 注入被黑客攻击,尽管 mysql_real_escape_string...

    我使用 CodeIgniter 但在黑客攻击方面遇到了麻烦 是否可以对以下登录代码进行 SQL 注入 function process login username mysql real escape string this gt inpu
  • 代码点火器 JSON

    你好 我使用 codeigniter 然后我从控制器中的数据库中回显输出 然后在我的视图文件中执行以下操作 但它没有显示任何内容 S 我的模型文件 function forumList this gt db gt select oversk
  • FOSUserBundle & REST Api 调用:如何使用自定义 FormType?

    我在我的 Symfony2 网站上使用 FOSUserBundle 现在我正在开发一个 API 以允许通过 REST API 调用进行注册 我已经覆盖了 FOSUserBundle 的 RegistrationController ApiR
  • 为什么 mysqli num_rows 总是返回 0?

    我在使用 mysqli 获取要返回的行数时遇到了问题 尽管确实有一些结果 但我每次都只是得到 0 if stmt mysqli gt prepare SELECT id title visible parent id FROM conten
  • 通过 PHP 使用 Eclipse BIRT 报表设计器

    我想在 php web 项目中使用 Birt Reports 因此我安装了推荐的 Java Bridge 和 BIRT Runtime 将 JavaBridgeTemplate621 war 和 birt war 移至我的 Tomcat 之
  • PDO fetch() 失败时会抛出异常吗?

    有没有方法PDO语句 fetch http php net manual en pdostatement fetch php如果 PDO 错误报告系统设置为抛出异常 则在失败时抛出异常 例如 如果我设置 PDO ATTR ERRMODE g
  • PHP 错误请求中 HTTP 请求失败

    我可以直接从浏览器请求 URL Web 服务 WS 但是当我在代码中使用 file get contents 或 fopen 方法时 我收到一条错误消息 有人有不使用curl的解决方案吗 public function sendHttpRe
  • 选择MySql表数据放入数组中

    我尝试从 mysql 捕获数据并将它们全部放入数组中 认为 users table id name code 1 gorge 2132 2 flix ksd02 3 jasmen skaod2 sql mysql query select
  • Laravel 集合 .each() + array_push

    需要有关 Laravel 上 each 方法内的 array push 的帮助 我无法在此代码上获取容器数组 imagesData array collect data images gt each function v k use ima
  • 如何以 Magento 方式实现库存过滤器?

    在我的 magento 网站上可以看到缺货的产品 我想要在分层导航中添加一个自定义过滤器 其中显示 排除缺货 当客户单击它时 应该隐藏缺货产品 默认情况下 我在 系统 gt 配置 gt 目录 gt 库存 下启用显示 显示缺货产品 即我希望客

随机推荐

  • 在定义的时间间隔后自动刷新 ASP.NET 网页?

    在我的一个网站中 我需要实现15分钟后网页自动刷新 为此 我编写了以下代码行 但我面临一个问题 在 15 分钟的持续时间之后 页面将刷新为新页面加载 在我的页面上 我使用了包含城市列表的组合框 有时我从索引 3 处的列表中选择一个项目 之后
  • C# 中的属性

    我知道 C 以及一般的 NET 非常注重属性 然而 尽管我已经使用 C 编程多年 但我还没有发现自己曾经使用过它们 有人可以让我开始使用它们 并解释在哪里最好使用它们吗 Thanks From Pro C 2008 和 NET 3 5 平台
  • .net检测分布式事务

    在我的应用程序中 我使用以下模式来调用数据库 do a transaction using TransactionScope transaction new TransactionScope TransactionScopeOption R
  • Git-svn 克隆错误:“致命:不是有效的对象名称 'refs/remotes/tags/Tag With Spaces'”

    我在用着git svn clone git 版本 1 9 4 msysgit 0 将 Subversion 存储库迁移到 Git Subversion 存储库的标签中包含空格 这会导致fatal Not a valid object nam
  • Athena 在不同账户的表之间查询

    我可以使用两个不同的 IAM 角色单独访问两个不同的 Athena 表 因为每个角色位于不同的账户中 有没有办法运行从两者中提取的单个查询 即 INNER JOIN 在引擎盖下 Athena 表数据位于 S3 存储桶中 Athena 支持跨
  • 为什么 EF 为简单查询生成子查询?

    有一个简单的 Linq to EF var query from p in db Posts where p BlogtId blogId select p 它会生成以下形式的 SQL SELECT Extent1 PostId Exten
  • 如何同步div的两个滚动条

    我有这个文件比较代码 http jsfiddle net CrN6X http jsfiddle net CrN6X 现在它满足了我的需要 一个只垂直滚动的大 div 两个仅水平滚动的较小潜水 这样我可以很容易地比较我的文件 但我有一个问题
  • 按内部数组的字段之一对多维数组进行排序

    如何按内部数组的字段之一对多维数组进行排序 在Java中 如何创建这样的多维数组 以及如何按 X 字段对其进行排序 有什么例子吗 Array 0 gt Array name gt Sony TV price gt 600 00 1 gt A
  • 获取两个条件(在不同数组上)为真的数组的索引

    我有两个 numpy 数组 a and b 我想选择所有索引a 1 and b 0 也就是说 如果我有以下数组 a 0 1 3 5 1 1 2 b 1 0 2 5 3 0 6 我想取回以下索引 1 5 我应该如何在 numpy 中执行此操作
  • 将“rand()”与“having”一起使用

    我有一个包含记录列表的表 每次迭代 必须从特定偏移量开始随机选择一组 每一行都有机会被选取 例如 新的或不经常选取的行会被选取更多 然而 某物不起作用 导致返回不满足使用别名的条件的行rand 我正在尝试使用以下查询 select id p
  • ag 网格服务器端分页“当网格位于绘制行中间时无法让网格绘制行”

    我有一个像这样的聚合组件 private gridOptions columnDefs this columnDefs frameworkComponents buttonRenderer ButtonRenderer pagination
  • 如何使用 gsub 将包含下划线的字符串部分转换为 Logstash 中的括号

    我想转换 例如 你好 1 再见 到 你好 1 再见 注意 1 即括号内仅包含数字 我从这样的事情开始 但不起作用 filter mutate gsub gt String D D Note that String here could be
  • 如果 edittext 包含该单词,如何为 Android 文本的一部分着色

    只要用户在编辑文本中输入 house 我就会尝试为单词 house 着色 这就是我所做的 if textA getText toString equals house String name String valueOf textA get
  • C++ 中 .inl 文件的含义

    在 inl 文件中进行声明有哪些优点 我什么时候需要使用相同的 inl文件从来都不是强制性的 对编译器没有特殊意义 这只是构建代码的一种方式 为可能阅读代码的人提供提示 I use inl文件分两种情况 用于内联函数的定义 用于函数模板的定
  • Symfony 控制器无法访问容器

    因此 我重新安装了 Symfony 3 尝试设置一些 API 路由 但我无法访问控制器内的容器 我的控制器从基本 Symfony 控制器扩展而来 它具有ContainerAwareTrait 但是当我尝试做时 this gt contain
  • Chrome 打包应用程序无法与 jquery 和 jquery mobile 配合使用

    使用 jQuery 1 10 2 和 jQuery Mobile 1 3 2 我尝试使用以下简单的 html 创建一个 chrome 打包应用程序 div div 有两个问题 首先 jQuery 将拦截加载 events js 的脚本标签并
  • Elastic beanstalk 上的 psycopg2 - 无法部署应用程序

    我正在将我的第一个应用程序 Flask 部署到 EB 但遇到了障碍 使用 PostgreSQL 需要我安装 psycopg2 但我不知道如何让它运行 我在这篇文章中看到 Amazon Elastic Beanstalk 上的 Psycopg
  • django-two-factor-auth 无法访问管理站点

    我正在将 django two factor auth 用于网络应用程序 我无法访问管理页面 我知道我输入了正确的凭据 当我输入不正确的凭据时 我会收到相应的错误消息 当我输入正确的凭据时 页面会使用以下 URL 重新加载 http loc
  • Rails:不是 ember,不是 JS 响应,而是介于两者之间的东西

    我正在开发一个标准的 Rails 应用程序 到目前为止我还没有使用任何 AJAX 只是使用了很好的 HTML 我的计划是迭代地添加 远程 链接和所有此类内容以及对 JS 响应的支持 因为我知道生成 JS 服务器端是非常非常邪恶的 但我发现它
  • 在 PHP 中压缩 GIF 图像质量?

    如何在 PHP5 中压缩 GIF 图像文件 我知道可以像这样使用 JPG imagejpeg resource filename quality 根据http us php net manual en function imagejpeg