在 PHP 中上传图像时去除元数据

2024-01-07

我认识的某个网站最近将其带宽从每月 2.5 TB 升级到 3.5 TB。

原因是他们最近超过了 2.5 限制。他们抱怨不知道如何降低带宽使用量。

我没有看到他们考虑的一件事是,网站上显示的 JPEG 和其他图像(这是一个图像较多的网站)可以包含元数据。照片是在哪里拍摄的等等。

事实是,这些信息在该网站上并不重要。它永远不会被使用。然而,它仍然增加了带宽,因为它将每个图像的文件大小从几个字节增加到几千字节。

在每月使用超过 2.5 TB 的网站上,剥离数千个图像的元数据将有助于减少每月至少几 GB 的带宽使用量,我认为,如果不是更多的话。

那么有没有办法在 PHP 中做到这一点呢?而且,对于已经存在的文件,有人知道吗good自动元数据删除器?我知道JPEG 和 PNG 剥离器 http://www.steelbytes.com/?mid=30,但这不是很好...不过对于初始清洁可能有用...


对于 GD 来说这很简单:

$img = imagecreatefromjpeg("myimg.jpg");
imagejpeg($img, "newimg.jpg", $quality);
imagedestroy($img);

这不会传输 EXIF 数据。虽然不知道它实际上会节省多少带宽,但您可以使用上面的代码来增加图像的压缩。这样可以节省a lot带宽,尽管它可能不会很受欢迎。

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

在 PHP 中上传图像时去除元数据 的相关文章

  • php56 - CentOS - Remi 仓库

    我刚刚在测试盒上安装了 php 5 6 正常的 cli php 解释器似乎不存在 gt php v bash php command not found gt php56 v PHP 5 6 13 cli built Sep 3 2015
  • file_get_contents,HTTP 请求失败

    我尝试使用以下方式从另一个网站获取内容file get contents但我总是收到 无法打开流 HTTP 请求失败 allow url fopen 已打开 并且我已经在防火墙关闭的情况下进行了测试 但还是会出现这种情况 请问还有什么原因呢
  • 从 Symfony2 中的 http_basic auth 注销

    每当我去 admin logout 我已正确重定向到项目的根目录 但在访问时仍处于登录状态 admin 因为没有提示我输入凭据 这是我的配置 安全 yml security firewalls admin area pattern admi
  • Ajax 与 chrome 扩展

    我将 url 发送到 chrome 扩展中的 php 文件 并需要获得响应 但不起作用 清单 json name Get pages source version 1 0 manifest version 2 description Get
  • PHP 自定义会话处理程序问题 (PHP 7.1)

    我刚刚在计算机上从 PHP 7 0 迁移到 PHP 7 1 当前版本的 WAMP 的全新 全新安装 它似乎破坏了自定义会话处理程序中的某些内容 该处理程序应该将会话保存到数据库而不是使用文件系统 自定义处理程序类是 class db ses
  • 如何将JS/CSS文件包含到Slim框架的模板中?

    我正在使用 Slim 框架开发一个简单的网络应用程序 我遇到了一个可能很简单的问题 我想将静态文件 CSS 和 Javascript 包含到我的模板中 我的项目文件夹结构如下 index php lt where all the routi
  • 如何接收发送到 twilio 号码的短信

    我在 twilio 创建了一个免费帐户 用于通过我的网站发送短信 注册后 我得到了一个 twilio 号码 例如 XXX XXX XXXX 我可以向手机号码发送消息 但我不知道如何使用这个 twilio 号码接收短信 请帮我解决这个问题 T
  • 如何在PHP中完成http响应并进行进一步处理?

    就我而言 我需要向客户端回显一个标志并发送一封电子邮件 现在客户端需要等待电子邮件发送 但我想把这两个步骤分开 该怎么做呢 你可以看一下异步运行 PHP 任务 https stackoverflow com questions 858883
  • php/symfony/doctrine 内存泄漏?

    我在使用 symfony 1 4 和原则 1 2 将对象批量插入数据库时 遇到问题 我的模型有一种称为 Sector 的对象 每个对象都有多个 Cupo 类型的对象 通常范围从 50 到 200000 这些物体非常小 只是一个短标识符字符串
  • 如何使用 PATCH 更新简单的数据库字段?

    我是 php 和 API 的新手 我正在尝试学习这些方法 但我无法执行 PATCH 或 PUT 来更新我的简单 mysql 数据库 我使用了以下代码 if isset PATCH con mysqli connect localhost r
  • 根据重复值对 PHP 数组进行排序

    我有一个包含重复值的数组 我想对数组进行排序 以便重复次数最多的值出现在行中的第一个 这是我的数组的示例 array 1 2 3 2 1 2 2 我想对该数组进行排序 以便它根据重复项的数量对自身进行排序 如下所示 array 2 1 3
  • 如何验证上传的文件是视频?

    我的服务器上有一些非常敏感的信息 因此安全性是一个大问题 用户需要能够上传视频 我知道允许用户上传文件会带来安全威胁 因为没有 100 的方法可以阻止他们上传非视频 但我显然可以选择服务器将保留哪些文件 我知道检查文件扩展名是不够的 检查
  • PHP 何时实现了函数使用闭包? [复制]

    这个问题在这里已经有答案了 我在 PHP 手册中找不到解释的部分use 我有代码 num 0 array walk recursive REQUEST function mValue use num num 我的 Eclipse 抱怨 Pa
  • PHP + MySQL 队列

    我需要一个充当队列的简单表 我的 MySQL 服务器限制是我不能使用 InnoDB 表 只能使用 MyISAM 客户 工人将同时工作 他们每次都需要接受不同的工作 我的想法是执行以下操作 伪代码 job lt SELECT FROM que
  • 安全地评估简单的数学

    我想知道是否有一种安全的方法来评估数学 例如 2 2 10000 12000 10000 20 2 2 40 20 23 12 无需使用eval 因为输入可以来自任何用户 我需要实现的只是整数的加法和减法 是否有任何已经存在的代码片段 或者
  • 访问 PHP 数组对象受保护的属性

    我正在尝试在 Symfony2 中上传多个文件 我正在尝试访问以下请求对象 但无法获取参数属性 如何将文件一一上传 我得到的错误 致命错误 无法访问第 66 行 var www File src Webmuch FileBundle Ent
  • 尽管设置了元数据,Reflect.getMetadata() 返回未定义

    我正在尝试在我的 TypeScript 应用程序中使用注释 但是我一定做错了什么 因为Reflect getMetadata 总是返回undefined 尽管我可以在调试器中看到元数据似乎设置正确 my class ts 带有带注释的属性
  • Yii2 无效调用:设置只读属性

    我有一个Post具有多对多关系的模型Tags 在 Post 模型中定义 public function getTags return this gt hasMany Tags className id gt tag id gt viaTab
  • 单元测试和静态方法

    阅读并学习单元测试 试图理解以下帖子 http misko hevery com 2008 12 15 static methods are death to testability 这解释了静态函数调用的困难 我不太清楚这个问题 我一直认
  • SimpleXML 返回空数组

    我正在尝试使用 Google Maps API 和 PHP SimpleXML 获取城市的纬度和经度 我尝试这样做 xml simplexml load file http maps googleapis com maps api geoc

随机推荐

  • 使用 C# 驱动程序从 mongo 集合中获取 DateTime

    我有以下对象 public class QueueItem public long id get set public SiteMapRequestState State get set public int WorkerId get se
  • 如何查找Android设备的序列号?

    我需要为 Android 应用程序使用唯一的 ID 并且我认为设备的序列号是一个不错的选择 如何在我的应用程序中检索 Android 设备的序列号 TelephonyManager tManager TelephonyManager myA
  • 如何在 QML 中设置 MessageDialog 的默认按钮?

    默认按钮是 是 但我想将按钮 否 设置为默认按钮 怎么做 我看不到任何方法可以通过当前的方式实现这一目标MessageDialogAPI 但我也认为这是特定于平台的 这就是它被隐藏的原因 不过 您可以创建自己的对话框 import QtQu
  • 通过定时器写入数据库的后台任务

    如何在后台的计时器上写入数据库 例如 检查邮件并向数据库添加新信件 在示例中 我在写入数据库之前简化了代码 Microsoft 示例中的类名称 录音类本身 namespace EmailNews Services internal inte
  • Camunda 无法执行 groovy 脚本

    这是我的依赖项 compile group org camunda bpm springboot name camunda bpm spring boot starter webapp version 3 0 0 compile group
  • 文件浏览器java

    我希望在 Java 应用程序中拥有某种文件浏览器 例如 Windows 资源管理器 我只想要能够递归列出文件夹内文件的东西 有没有一种简单的方法可以做到这一点 我已经尝试使用 JFileChooser 但这不是我想要的 此代码片段允许您递归
  • TextView android:ellipsize="marquee" 未按预期工作

    我在 ListView 中有一些自定义元素 据了解 每个元素只是 LinearLayout 中的 TextView 当文本太长时 我希望 TextView 内的文本成为水平滚动的单行 我阅读了很多关于此问题的文章 并提出了一个应该可行的解决
  • 这是“标签调度”吗?

    假设我有一些代码 void barA void barB void fooA Duplicate code barA More duplicate code void fooB Duplicate code barB More duplic
  • html中元素的排列

    可以使用 html css 实现这种结构吗 但我不想在橙色块之间留出垂直空间 而是想成为一个在另一个块的顶部 我已经使用了 flex 和 grid 但到目前为止还没有真正成功 jsfiddle https jsfiddle net 3uxc
  • VSCode 不会导入 java.awt 包

    我在我的java类中实现了ActionListener 但是当我尝试自动导入 Shift Alt O 时 它给出了这个错误 运行贡献的命令 vscode delegate cmd ksicrwzq 失败 整个代码在这里 import jav
  • 编译器错误消息:CS0433

    我会突然出现一条奇怪的错误消息 我是一个初学者 用 C 在 ASP NET 中构建一个网站 发现错误的文件是 ascx 用户控制文件 编译器错误消息 CS0433 两者中都存在类型 链接 Temporary ASP NET Files ro
  • package.json 中的本地依赖项

    我想做这样的事情 所以npm install还安装了package json of somelocallib或者更重要的是它的依赖关系 dependencies express somelocallib npm gt 2 0 0 这个功能是
  • 错误模块“QtQuick”版本 2.12 未安装

    我已经安装了 Qt 4 5 0 社区 我正在尝试使用以下命令构建我的项目Qt5 10 0 MinGW 32位 将 QtQuick 2 12 导入到 qtquick 项目的 qml 文件中后 我遇到以下错误 模块 QtQuick 版本 2 1
  • 使用 OData 服务时无法加载资源

    你好 社区 我需要一些帮助 我的 odata 服务已经在运行 并且我有一个像这样的网址 https myclient port sap opu odata SAP servicename SRV MaterialListSet https
  • 更新到 ASP NET 5 beta5 破坏了一切

    我在更新到 beta5 时遵循了本指南 并且更新过程似乎有效 http blogs msdn com b webdev archive 2015 06 30 asp net 5 beta5 now available aspx http b
  • 处理 Array#map 内 async/await 中的错误(拒绝)

    节点 8 1 2 我有一个结构 其中一个文件在映射中调用另一个文件的函数 在一个真实的例子中我会使用Promise all on the map但这不是这里的问题 结构如下 A js const b require B function e
  • 将 GUID 转换为 varchar(32)

    我怎样才能转换一个GUID36字符到 VARCHAR 32 我正在尝试将数据从一个表复制到另一个表 这两个表中有两个相似的列 表1 colx是一个 GUID 所以它是36由于连字符而导致的总字符长度 对应的列是表2 colx但它是一个 VA
  • 添加这个按钮是什么

    How can i add what s this button besides close button i have seen lot of threads where they want to remove it but not a
  • ViewPager 中区分用户滚动和程序化页面更改

    我有一个android support v4 view ViewPager在我的应用程序中 我想区分以编程方式启动的平滑滚动和用户启动的触摸滚动 我看过ViewPager OnPageChangeListener我相信答案可能就在那里 但我
  • 在 PHP 中上传图像时去除元数据

    我认识的某个网站最近将其带宽从每月 2 5 TB 升级到 3 5 TB 原因是他们最近超过了 2 5 限制 他们抱怨不知道如何降低带宽使用量 我没有看到他们考虑的一件事是 网站上显示的 JPEG 和其他图像 这是一个图像较多的网站 可以包含