目录
回复讨论(解决方案)
首页 后端开发 php教程 PHP写入读取图片自定义信息_exif或者什么的?

PHP写入读取图片自定义信息_exif或者什么的?

Jun 23, 2016 pm 02:19 PM

PHP 图片

需求描述:

使用PHP对图片文件进行优化处理,但此优化处理只能进行一次,二次进行会对图片造成不可恢复的损坏。期望在图片一次处理之后,在图片文件中写入一个自定义的字符串,什么都行,仅用于判断图片是否经过处理。


期待可以使用PHP解决。目前想到JPEG格式的话有 EXIF信息,可以尝试从这个作为突破,在EXIF信息中写入一个自定义的字符串。但GIF,PNG,BMP呢,怎么能解决常用的网络图片格式?

google到这货
Imagick::setImageProperty

根据文档http://www.php.net/manual/zh/imagick.setimageproperty.php

貌似刚好符合要求,但是使用这个函数保存图片,再次读取却为空,不晓得是不是我的用法有问题

$image = new Imagick($file);$image->setImageProperty('Exif:Make', 'Imagick');$image->writeImage($file2);$image2 = new Imagick($file2);echo $image->getImageProperty('Exif:Make');
登录后复制



这个是一个思路,但没能实现,真希望是我用法有问题,而不是这个函数不可实现。

又尝试使用 APP13

$size = getimagesize('1.jpg', $info);var_dump($size);if(isset($info['APP13'])){    $iptc = iptcparse($info['APP13']);    var_dump($iptc);}
登录后复制


但也不行。

难道我一直在走弯路?有什么好的办法吗?要的不多,就是想在不破快图片的基础上在图片数据中写入一个字符串,供下次读取这个字符串。

大大们现身吧,给点指点,解决问题立刻散分。


回复讨论(解决方案)

对于 GD 支持的图片,均可以在图片数据结束后附加自定义数据,而不影响图片的内容
示例代码

$url = 'http://avatar.profile.csdn.net/0/E/F/1_jaylecn.jpg';$im = imagecreatefromjpeg($url);imagepng($im, 'test.png'); //产生一个 png 图片文件$s = 'abcefg'; //待附加的信息file_put_contents('test.png', sprintf('%sInfo%s', $s, pack('n', strlen($s))), FILE_APPEND); //按自定义格式附加在图片文件之后//回读$s = file_get_contents('test.png');$t = unpack('A4t/noffs', substr($s, -6)); //取回自定义信息的长度$v = substr($s, -6 - $t['offs'], -6); //取回自定义信息echo $v;//abcdef
登录后复制

请自行验证图片数据没有被破坏

其实大致有这样一个概念:可以边读取边展示的基本是流式数据,这样的数据,头文件将说明了mimetype和长度(或有结束标志),那么在长度(或结束标志)之后的“额外”数据并不影响主体数据的展示,依此概念,甚至rar、zip等也能做手脚,呵呵

谢谢两位回答,看样子思路是一样的,就是在文件的数据格式之外插入一段字符。

开始也想到过这个办法,手工编辑了一个几个文件,其中有一个GIF动态图插入之后,图片遭到损坏。当时认为这种方法不可行,就没继续深入。我又使用了那张手工修改被破坏的GIF图,用xuzuning的代码测试了一下,竟然是可以的,看来手工修改确实不行。

这个方案看来基本可行了,那么问题就是  我恐怕 没办法去测试所有的图片格式,这种方法是否具有确定性呢?(GD只要支持,就一定没问题?)

PS:我先去测试几种格式的图片试试。

用Imagick类可以实现,需要PHP安装imagemagick扩展模块

我在发帖的时候就已经说了,google到了一个 Imagick 的函数,但实际上是无法写入的,不知道楼上说的用Imagick实现是怎么实现的?

是的,GD 支持的图片都是可以的(gif、jpg、png)
因为此类图片都是压缩保存的,在文件头部都有一个数据区长度的表识。
图片显示时,软件通过该标识读取并解压数据

但对于 GD 不支持的,比如 bmp 文件,就没有那么幸运了。
bmp 的数据是从文件尾向文件头方向排列的,如果你在文件尾部添加内容,就将破坏图片数据

其实最简单的测试方法就是准备你的二进制数据和原始文件,然后用DOS命令

copy /b 原始文件 + 二进制数据 新文件

然后检查这个新文件有没问题

先用这种方案吧,有个PHP类或者什么的,可以兼容各种图片格式就好了。这个需求我觉得倒还挺常见的,比如批量给图片打水印,可以给图片加个属性来判断是否已经水印过了。

结贴,感谢两位

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

11个最佳PHP URL缩短脚本(免费和高级) 11个最佳PHP URL缩短脚本(免费和高级) Mar 03, 2025 am 10:49 AM

长URL(通常用关键字和跟踪参数都混乱)可以阻止访问者。 URL缩短脚本提供了解决方案,创建了简洁的链接,非常适合社交媒体和其他平台。 这些脚本对于单个网站很有价值

Instagram API简介 Instagram API简介 Mar 02, 2025 am 09:32 AM

在Facebook在2012年通过Facebook备受瞩目的收购之后,Instagram采用了两套API供第三方使用。这些是Instagram Graph API和Instagram Basic Display API。作为开发人员建立一个需要信息的应用程序

在Laravel中使用Flash会话数据 在Laravel中使用Flash会话数据 Mar 12, 2025 pm 05:08 PM

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

构建具有Laravel后端的React应用程序:第2部分,React 构建具有Laravel后端的React应用程序:第2部分,React Mar 04, 2025 am 09:33 AM

这是有关用Laravel后端构建React应用程序的系列的第二个也是最后一部分。在该系列的第一部分中,我们使用Laravel为基本的产品上市应用程序创建了一个RESTFUL API。在本教程中,我们将成为开发人员

简化的HTTP响应在Laravel测试中模拟了 简化的HTTP响应在Laravel测试中模拟了 Mar 12, 2025 pm 05:09 PM

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

php中的卷曲:如何在REST API中使用PHP卷曲扩展 php中的卷曲:如何在REST API中使用PHP卷曲扩展 Mar 14, 2025 am 11:42 AM

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

在Codecanyon上的12个最佳PHP聊天脚本 在Codecanyon上的12个最佳PHP聊天脚本 Mar 13, 2025 pm 12:08 PM

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

宣布 2025 年 PHP 形势调查 宣布 2025 年 PHP 形势调查 Mar 03, 2025 pm 04:20 PM

2025年的PHP景观调查调查了当前的PHP发展趋势。 它探讨了框架用法,部署方法和挑战,旨在为开发人员和企业提供见解。 该调查预计现代PHP Versio的增长

See all articles