和图片有关的几个旋转属性:

1 UIImage的UIImageOrientation属性。常见并且也是网上很容易查到的一个属性。值从0开始:

typedef NS_ENUM(NSInteger,UIImageOrientation) {

UIImageOrientationUp,           // default orientation

UIImageOrientationDown,         // 180 deg rotation

UIImageOrientationLeft,          // 90 deg CCW

UIImageOrientationRight,        // 90 deg CW

UIImageOrientationUpMirrored,   // as above but image mirrored along other axis. horizontal flip

UIImageOrientationDownMirrored, // horizontal flip

UIImageOrientationLeftMirrored,  // vertical flip

UIImageOrientationRightMirrored, // vertical flip

};

(注:根据标准C枚举默认从0开始)

2 CGImageSourceRef生成的CFDictionaryRef可以查询到kCGImagePropertyOrientation属性:

1 =  0th row is at the top, and 0thcolumn is on the left.

2 =  0th row is at the top, and 0thcolumn is on the right.

3 =  0th row is at the bottom, and0th column is on the right.

4 =  0th row is at the bottom, and0th column is on the left.

5 =  0th row is on the left, and 0thcolumn is the top.

6 =  0th row is on the right, and0th column is the top.

7 =  0th row is on the right, and0th column is the bottom.

8 =  0th row is on the left, and 0thcolumn is the bottom.

根据文档中的注释我们可以知道这个值是和TIFF和Exif一致的(后门会提到TIFF和EXIF)。值是从1开始(妈蛋不像枚举默认一样是从0开始!!,具体每个值的含义查翻译自!己!脑!补!)。(上面的解释其实就是在描述视觉上的第0行第0列在图片中的上下左右的位置,写个“上”字有助于想象。)

3 EXIF:实际上Exif格式就是在JPEG格式头部插入了数码照片的信息,包括拍摄时的光圈、快门、白平衡、ISO、焦距、日期时间等各种和拍摄条件以及相机品牌、型号、色彩编码、拍摄时录制的声音以及全球定位系统(GPS)、缩略图等。简单地说,Exif=JPEG+拍摄参数。因此,你可以利用任何可以查看JPEG文件的看图软件浏览Exif格式的照片,但并不是所有的图形程序都能处理Exif信息。(来自百度百科,需要注意的是百度百科和在程序中输出的EXIF属性并不一致,比如包含的内容、属性的名称。)

4 TIFF:TIFF是Tag ImageFile Format的缩写,这不仅仅是一种文件扩展名或格式,而是一种开放标准,核心在于动态的标记存储能力,就是Key/Value对的存储能力。

该标准很多老牌大公司如Adobe都参与过修订,目前的元数据(MetaData)是经过很多年演变后几近统一的,TIFF除了支持动态的标记规范,还支持例如单文件多图数据存储(Pages)、缩略图等等的特性。

TIFF的应用范围大致上有GIF, TIFF,JPG/JPG2000等,无PNG。

而EXIF是主要由多家相机厂商推行的标准,用于标识出拍摄时的摄影信息,是另外一个厂商级的规范,该规范建立在TIFF格式的基础之上,也就是无TIFF就无EXIF,它也是利用了TIFF的组织方式对特定数据进行组织,所以对于PNG这种连TIFF都不遵守的文件格式自然也无所谓EXIF。

另外,由此可见,TIFF是基础,标识了图像的几种重要信息,例如长宽,采样数,分辨率,旋转方向等,而EXIF则会对光圈,快门等摄影信息进行丰富,两者或许会有点点重叠,但是TIFF有的属性肯定是以TIFF为准,并且有的图像有TIFF却不一定会有EXIF。可参考 http://www.awaresystems.be/imaging/tiff/faq.html相关深入内容大家自行挖掘)

获取iPhone相片的信息中也能证实以上的内容,根据(代码自己放大了看,包括了获取方向的代码)

NSData *adata = [[NSDataalloc] initWithBytesNoCopy:buffer length:image_representation.sizefreeWhenDone:YES];

NSDictionary*sourceOptionsDict = [NSDictionarydictionaryWithObjectsAndKeys:(id)[image_representation UTI] ,kCGImageSourceTypeIdentifierHint,nil];

CGImageSourceRefsourceRef = CGImageSourceCreateWithData((__bridge CFDataRef) adata,  (__bridge CFDictionaryRef)sourceOptionsDict);

CFDictionaryRefimagePropertiesDictionary;

imagePropertiesDictionary =CGImageSourceCopyPropertiesAtIndex(sourceRef,0, NULL);

CFDictionaryReftiff = (CFDictionaryRef)CFDictionaryGetValue(imagePropertiesDictionary,kCGImagePropertyTIFFDictionary);

NSDictionary*tiff_dict = (__bridge NSDictionary*)tiff;

NSIntegerorientation = [[tiff_dict objectForKey:@"Orientation"] integerValue];

以上代码可以获得相片的TIFF信息,类比可以获得EXIF信息。在控制台输出字典imagePropertiesDictionary信息可以看到key TIFF和EXIF。百度百科上列举的一些EXIF属性其实就包含在了TIFF对应的value中。

研发过程中发生的一个问题:大图显示正常但是服务器获取的缩略图可能颠倒的问题,,总结了一下问题的原因。在用uiimage进行图片颠倒的时候并写文件的时候,很有可能没有操作原图而是在操作生成的快照,这样上传给服务器的图片中TIIF中旋转的信息并没有更改,而服务器 生成原始图片的时候丢弃了这些信息就会生成一个看起来很正常的图片,但是生成缩略图的时候服务器组件貌似可能大概处理过后保留了这个旋转信息,这就导致了服务器同一张图片的大图正常但是缩略图旋转的问题。

以上内容纯属抄袭,如有问题别来找我。

和图片有关的几个旋转属性相关推荐

  1. vue3项目将图片正时针、逆时针旋转

    点击按钮,让某个图片正时针或者逆时针旋转,我使用的是css3中transform 和transition 属性,动态给图片添加样式,当触发正时针或者逆时针旋转按钮的时候,给该图片的属性进行赋值即可,来 ...

  2. 中 自动展示链接的内容_织梦DEDECMS文章内容中的图片自动添加ALT和title属性方法...

    今天下载我资源网(www.xiazaiwo.net)要说的是织梦DEDECMS文章内容中的图片自动添加ALT和title属性,如果觉得不错,请分享给大家,也给大家做个参考.一起跟随小编过来看看吧! 织 ...

  3. php转换图片属性a,PHP 提取图片img标记中的任意属性

    /* PHP正则提取图片img标记中的任意属性 */ $str = ' PHP正则提取或更改图片img标记中的任意属性'; //1.取整个图片代码 preg_match('/]*?src\s*=\s* ...

  4. php正则获取html中所有的src,php正则提取html图片(img)src地址与任意属性

    简单版: header("Content-Type: text/html;charset=utf-8"); $str = ' 2014年 '; $imgpreg = "/ ...

  5. 微信小程序怎么实现 图片按住一角缩放、旋转、拖拽

    微信小程序怎么实现 图片按住一角缩放.旋转.拖拽 图片一角可以加个小图片,按住来操作 利用movable-view.movable-area 可以实现拖拽缩放.不好旋转 是不是可以利用canvas绘图 ...

  6. Vue 使用 Viewers 实现图片的 放大缩小、 旋转 、 拖拉等操作、支持多图片

    目录 方式一 element ui自己搞了一个 这种 方式二 使用插件 方式一 element ui自己搞了一个 这种 方式二 使用插件 先看效果图吧,这是单张图片的.放大缩小支持鼠标滚轴操作. 具体 ...

  7. Android中实现图片平移、缩放、旋转同步进行

    转载请注明转自:noyet12的博客 博客原址:http://blog.csdn.net/u012975705/article/details/49797911 源码下载地址: (github)htt ...

  8. Java使用thumbnailator进行图片压缩缩放裁剪水印旋转处理

    Java使用thumbnailator进行图片压缩缩放裁剪水印旋转处理 一.thumbnailator介绍 二.使用步骤 1.maven的pom.xml引入如下 2.测试代码 一.thumbnaila ...

  9. html免费编辑器图片alt,织梦模板kindeditor编辑器图片上传增加图片说明alt属性和title属性...

    织梦kindeditor编辑器图片上传增加图片说明alt属性和title属性效果图: 1.在织梦/include/kindeditor/kindeditor-all.js 或者 /kindeditor ...

最新文章

  1. 单调队列多重背包时间复杂度O(vn)
  2. java解数独_java解数独
  3. ftp在命令行状态下下载跟上传东西
  4. VTK:相互作用之SelectAnActor
  5. 洛谷 - P4043 [AHOI2014/JSOI2014]支线剧情(最小费用可行流)
  6. python读写kafka集群(转载+自己验证)
  7. postgresql select for update 多行加锁顺序_PostgreSQL和Mysql的MVCC实现机制的差异对比
  8. python基础之类的属性方法、魔术方法普通方法
  9. 计算机应用基础本科答案排序,计算机应用基础本科操作题
  10. Qt qss 动态属性-不同条件不同显示
  11. 非确定有限自动机转换为确定有限自动机
  12. 更新1 80000字符,自制python小游戏,手写勿喷
  13. 基于MATLAB/Simulink的电力电子电路仿真技术——直流降压(Buck)变换器及Powergui的使用
  14. 用matlab画excel,如何用matlab在Excel中画画
  15. 阿童木实验校区-----少儿编程鼓励跨学科融合发展!
  16. 蓝桥 卷“兔”来袭编程竞赛专场-04栅栏加密 题解
  17. 结构光三维重建基本原理
  18. hackinglab-脚本关5——逗比验证码第一期
  19. 商城项目18_esMapping字段映射、常用类型、数据迁移、ik分词器、自定义分词器
  20. Java网络编程:TCP,UDP,sock编程

热门文章

  1. 自制微信机器人:群发消息、自动接收好友
  2. 在黑马的两个月培训的感受
  3. 基于Java技术的大型网站架构设计方案
  4. RHEL-UEFI引导恢复规范
  5. 大数据时代,Wyn Enterprise和您一起探讨CIO的困境和出路 ZT
  6. Redux 源码解读 —— 从源码开始学 Redux
  7. 乐观锁与悲观锁、自旋锁
  8. CSS3动画帧数科学计算法http://tid.tenpay.com/?p=5983
  9. 数据解读:都知道《隐秘的角落》火了,它到底怎么火的?
  10. BlackBerry 9850 应用:新浪微博