一,常用图片格式的结束标志是什么?

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图片是否损坏)的更多相关文章

  1. Java使用URL类下载的图片不完整

    问题 今天在使用URL类来下载网站中的图片的时候,出现了一个问题:下载的图片不完整,并且每次下载的图片大小也不是都相同,反正就是不完整. 问题代码如下: package cn.ganlixin.tes ...

  2. 【5】TensorFlow光速入门-图片分类完整代码

    本文地址:https://www.cnblogs.com/tujia/p/13862364.html 系列文章: [0]TensorFlow光速入门-序 [1]TensorFlow光速入门-tenso ...

  3. 利用php获取图片完整Exif信息类 获取图片详细完整信息类

    <?php /** * @Author: TonyLevid * @Copyright: TonyLevid.com * @Name: Image Exif Class * @Version: ...

  4. JS检查当图片不存在时显示默认图片和键盘大小写键状态

    当图片不存在时显示默认图片 <script type="text/javascript"> var imgs = document.images; for(var i ...

  5. C# 图片的裁剪,两个图片合成一个图片

    图片的裁剪,两个图片合成一个图片(这是从网上摘的) /// <summary>         /// 图片裁剪,生成新图,保存在同一目录下,名字加_new,格式1.png  新图1_ne ...

  6. 从web编辑器 UEditor 中单独提取图片上传,包含多图片单图片上传以及在线涂鸦功能

    UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码.(抄的...) UEditor是非常好用的富文 ...

  7. 在viewPager中双指缩放图片,双击缩放图片,单指拖拽图片

    我们就把这个问题叫做图片查看器吧,它的主要功能有: (项目地址:https://github.com/TZHANHONG/ImageViewer/releases/tag/1.0,里面的MyImage ...

  8. 阿里云使用js 实现OSS图片上传、获取OSS图片列表、获取图片外网访问地址(读写权限私有、读写权限公共);

    详情请参考:https://help.aliyun.com/document_detail/32069.html?spm=a2c4g.11186623.6.763.ZgC59a 或者https://h ...

  9. img只显示图片一部分 或 css设置背景图片只显示图片指定区域

    17:14 2016/3/22img只显示图片一部分 或 css设置背景图片只显示图片指定区域 background-position: 100% 56%; 设置背景图片显示图片的哪个坐标区域,图片左 ...

随机推荐

  1. 在express中使用ES7装饰器构建路由

    在Java的Spring框架中,我们经常会看到类似于@Controller这样的注解,这类代码能够极大的提高我们代码的可读性和复用性.而在Javascript的ES7提案中,有一种新的语法叫做deco ...

  2. oracle之创建和管理数据库用户账户

    创建和管理数据库用户账户 sys 查看数据库里有多少用户?select username from dba_users; 9.1.1用户的缺省表空间 每个用户账户都可以指定默认的表空间,用户创建的任何 ...

  3. Ruby探微初步

    我的导师,曾经对我说过,常规编程语言大抵不过顺序.条件.循环 接下来以Ruby为例,简单说说 控制语句 控制语句能让程序在某种条件下,改变执行顺序,或者只执行某一部分. 控制语句的分类 控制语句大致可 ...

  4. [LeetCode]230. 二叉搜索树中第K小的元素(BST)(中序遍历)、530. 二叉搜索树的最小绝对差(BST)(中序遍历)

    题目230. 二叉搜索树中第K小的元素 给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素. 题解 中序遍历BST,得到有序序列,返回有序序列的k-1号元素. 代 ...

  5. Java成神之路:第一帖---- Vue的组件属性components用法

    Vue的组件属性:components 使用场景 一般在项目的使用过程中,某个需要多次使用的模块,会将整个模块抽取出来,写一个组件,供给其他页面进行调用或者是在一个页面中,多次使用到一个重复的代码样式 ...

  6. JavaCV与OpenCV的区别和使用中遇到的问题

    写这篇随笔的原因是因为我用了JavaCV一段时间后项目情况糟透了,可能大家很熟悉OpenCV,也有一部分人熟悉JavaCV,但是我相信真正把JavaCV用到生产上的不是太多. 我参与图片处理项目快一个 ...

  7. JVM参数总结

    官方文档 堆参数: -Xms: 堆的初始值,例如 -Xmx2048,初始堆大小为 2G -Xmx: 堆的最大值,例如 -Xmx2048M,允许最大堆内存 2G -Xmn: 新生代大小 -XX:Surv ...

  8. 海量数据分库分表方案(二)技术选型与sharding-jdbc实现

    上一章已经讲述分库分表算法选型,本章主要讲述分库分表技术选型 文中关联上一章,若下文出现提及其时,可以点击 分库分表算法方案与技术选型(一) 主要讲述 框架比较 sharding-jdbc.zdal ...

  9. 中秋国庆8天挑战赛 之 挑战8天掌握微信小程序

    中秋国庆8天挑战赛 挑战8天掌握微信小程序 当前学习进度: // 10.1​// 学习内容:​// 10.2​// 学习内容:​// 10.3​// 学习内容:​// 10.4​// 学习内容:​// ...

  10. 开源两个spring api项目

    开源两个spring api项目 转载请注明出处: https://www.cnblogs.com/funnyzpc/p/13762616.html 工作也有五年有余了,中间一直迫于时间或能力没从零开 ...