ImageMagick:用identify检查图片是否完整?(jpg/gif/png图片是否损坏)
一,常用图片格式的结束标志是什么?
1,Jpg格式的文件在16进制中的表示是以 ff d9 两个字节结尾
2, gif格式的文件,结尾是 3b
3, png格式的文件,结尾是 00 00 00 00 49 45 4E 44 AE 42 60 82
说明:我们要用到identify的命令,需要安装ImageMagick
参见这一篇:
https://www.cnblogs.com/architectforest/p/12807514.html
说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest
对应的源码可以访问这里获取: https://github.com/liuhongdi/
说明:作者:刘宏缔 邮箱: 371125307@qq.com
二,为什么要查看图片的结束标志?
图片文件在上传过程中受网络情况影响,有可能发生网络中断,
或者处理程序在处理图片时不确定文件是否已上付完成,
图片文件的结束位或结束标志就成为我们检查文件是否完整的标准
三,用linux命令查看图片的结束标志?
1,用xxd命令看一个完整图片的结束标志:
[root@blog html]# xxd a.jpg | tail -2
000041a0: 94ec a491 cc58 b396 354d 8b06 c9b7 6e90 .....X..5M....n.
000041b0: 6922 6997 2294 21f2 bcff d9 i"i.".!....
说明:文件结尾是 ffd9,说明图片文件完整
a.jpg如图:

2,用xxd命令看一个不完整图片的结束标志:
[root@blog html]# xxd b.jpg | tail -2
00002d20: 40a3 ff00 5c67 74f1 5f95 b4df d51e 6b21 @...\gt._.....k!
00002d30: 35e3 5.
说明:文件结尾不是 ffd9,说明图片文件不完整而是已损坏
b.jpg如图:

3,也可以使用od这个命令,还是上面的两张图片,举例如下:
#--endian=big: 指定大端小端以大端方式输出
#-h: 指定以16进制输出
完整图片
[root@blog html]# od --endian=big -h a.jpg | tail -2
0040660 6922 6997 2294 21f2 bcff d900
0040673
损坏图片
[root@blog html]# od --endian=big -h b.jpg | tail -2
0026460 35e3
0026462
四,用identify检查图片是否完整?
1,检查gif是否有损坏?
有损坏的gif
[root@blog img]$ identify -verbose dog.gif | grep corrupt
identify: corrupt image `dog.gif' @ error/gif.c/DecodeImage/513.
identify: corrupt image `dog.gif' @ error/gif.c/ReadGIFImage/1389.
图片如下:

无损坏的gif
[root@blog img]$ identify -verbose dog_tmb.gif | grep corrupt
没有任何输出
图片如下:

2,检查jpg图片是否有损坏?
有损坏的jpg
[root@blog html]$ identify -verbose b.jpg | grep Corrupt
identify: Premature end of JPEG file `b.jpg' @ warning/jpeg.c/JPEGWarningHandler/390.
identify: Corrupt JPEG data: premature end of data segment `b.jpg' @ warning/jpeg.c/JPEGWarningHandler/390.
无损坏的jpg不会输出包含Corrupt字样的信息
五,查看ImageMaigck的版本:
[root@blog html]# identify --version
Version: ImageMagick 6.9.10-86 Q16 x86_64 2020-01-13 https://imagemagick.org
Copyright: 1999-2020 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC Modules OpenMP(4.5)
Delegates (built-in): bzlib cairo fftw fontconfig freetype gslib gvc jbig jng jp2 jpeg lcms ltdl
lzma openexr pangocairo png ps raqm raw rsvg tiff webp wmf x xml zlib
ImageMagick:用identify检查图片是否完整?(jpg/gif/png图片是否损坏)的更多相关文章
- Java使用URL类下载的图片不完整
问题 今天在使用URL类来下载网站中的图片的时候,出现了一个问题:下载的图片不完整,并且每次下载的图片大小也不是都相同,反正就是不完整. 问题代码如下: package cn.ganlixin.tes ...
- 【5】TensorFlow光速入门-图片分类完整代码
本文地址:https://www.cnblogs.com/tujia/p/13862364.html 系列文章: [0]TensorFlow光速入门-序 [1]TensorFlow光速入门-tenso ...
- 利用php获取图片完整Exif信息类 获取图片详细完整信息类
<?php /** * @Author: TonyLevid * @Copyright: TonyLevid.com * @Name: Image Exif Class * @Version: ...
- JS检查当图片不存在时显示默认图片和键盘大小写键状态
当图片不存在时显示默认图片 <script type="text/javascript"> var imgs = document.images; for(var i ...
- C# 图片的裁剪,两个图片合成一个图片
图片的裁剪,两个图片合成一个图片(这是从网上摘的) /// <summary> /// 图片裁剪,生成新图,保存在同一目录下,名字加_new,格式1.png 新图1_ne ...
- 从web编辑器 UEditor 中单独提取图片上传,包含多图片单图片上传以及在线涂鸦功能
UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码.(抄的...) UEditor是非常好用的富文 ...
- 在viewPager中双指缩放图片,双击缩放图片,单指拖拽图片
我们就把这个问题叫做图片查看器吧,它的主要功能有: (项目地址:https://github.com/TZHANHONG/ImageViewer/releases/tag/1.0,里面的MyImage ...
- 阿里云使用js 实现OSS图片上传、获取OSS图片列表、获取图片外网访问地址(读写权限私有、读写权限公共);
详情请参考:https://help.aliyun.com/document_detail/32069.html?spm=a2c4g.11186623.6.763.ZgC59a 或者https://h ...
- img只显示图片一部分 或 css设置背景图片只显示图片指定区域
17:14 2016/3/22img只显示图片一部分 或 css设置背景图片只显示图片指定区域 background-position: 100% 56%; 设置背景图片显示图片的哪个坐标区域,图片左 ...
随机推荐
- 完美激活PyCharm教程
1.版本 本文中pycharm版本为PyCharm Professional-2018.3.3,JetbrainsCrack版本为4.2.需要注意,不同版本的pycharm对应的JetbrainsCr ...
- Java面试炼金系列 (1) | 关于String类的常见面试题剖析
Java面试炼金系列 (1) | 关于String类的常见面试题剖析 文章以及源代码已被收录到:https://github.com/mio4/Java-Gold 0x0 基础知识 1. '==' 运 ...
- 终于有人把MYSQL索引讲清楚了
一什么是索引 索引在MYSQL中也可以称为键,其是存储引擎用于快速查找记录的一种数据结构:这样听起来有点生涩,你可能难以理解:如果给你一本书,你如何能够精确的查找到书中某个章节的具体位置呢?我们肯定是 ...
- 浅入ABP(1):搭建基础结构的 ABP 解决方案
浅入ABP(1):搭建基础结构的 ABP 解决方案 目录 浅入ABP(1):搭建基础结构的 ABP 解决方案 搭建项目基础结构 ApbBase.Domain.Shared 创建过程 ApbBase.D ...
- WeihanLi.Npoi 1.10.0 更新日志
WeihanLi.Npoi 1.10.0 更新日志 Intro 上周有个网友希望能够导入Excel时提供一个 EndRowIndex 来自己控制结束行和根据字段过滤的,周末找时间做了一下这个 feat ...
- 搜索引擎学习(五)Lucene操作索引
一.代码分析 /** * Lucene入门 * 操作索引 */ public class ManageIndex { public IndexWriter getIndexWriter() throw ...
- 企业面试中关于MYSQL重点的28道面试题解答
问题1:char.varchar的区别是什么? varchar是变长而char的长度是固定的.如果你的内容是固定大小的,你会得到更好的性能. 问题2: TRUNCATE和DELETE的区别是什么? ...
- appcan 文件下载与预览
用appcan开发的app如何在手机上查看附件和预览附件呢?今天就为大家介绍一下,用APP看附件实大是太方便了. 1.直接上代码吧,首先要初始化插件用到的所有方法.这个方法中 cbIsFileExis ...
- spring in action-note-2
1.AOP:在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是 ...
- Hibernate4.3 继承映射
一.单表继承映射 父子类合成一张表 An_id An_name gender Weight Height type 1 dog 1 300 D 2 cat 1 100 C 在Animal.hbm.xm ...