文档章节

处理图片方向

n
 nealxue
发布于 2015/01/15 23:01
字数 259
阅读 6
收藏 0

安卓端不会取图片方向信息,因此ios端图片要在安卓上正确显示,需要全部转换成  UIImageOrientationUp


- (UIImage *)fixOrientation:(UIImage *)aImage
{
	// No-op if the orientation is already correct
	if (aImage.imageOrientation == UIImageOrientationUp)
		return aImage;

	// We need to calculate the proper transformation to make the image upright.
	// We do it in 2 steps: Rotate if Left/Right/Down, and then flip if
	// Mirrored.
	CGAffineTransform transform = CGAffineTransformIdentity;

	switch (aImage.imageOrientation) {
		case UIImageOrientationDown:
		case UIImageOrientationDownMirrored:
			transform = CGAffineTransformTranslate(transform, aImage.size.width, aImage.size.height);
			transform = CGAffineTransformRotate(transform, M_PI);
			break;

		case UIImageOrientationLeft:
		case UIImageOrientationLeftMirrored:
			transform = CGAffineTransformTranslate(transform, aImage.size.width, 0);
			transform = CGAffineTransformRotate(transform, M_PI_2);
			break;

		case UIImageOrientationRight:
		case UIImageOrientationRightMirrored:
			transform = CGAffineTransformTranslate(transform, 0, aImage.size.height);
			transform = CGAffineTransformRotate(transform, -M_PI_2);
			break;

		default:
			break;
	}

	switch (aImage.imageOrientation) {
		case UIImageOrientationUpMirrored:
		case UIImageOrientationDownMirrored:
			transform = CGAffineTransformTranslate(transform, aImage.size.width, 0);
			transform = CGAffineTransformScale(transform, -1, 1);
			break;

		case UIImageOrientationLeftMirrored:
		case UIImageOrientationRightMirrored:
			transform = CGAffineTransformTranslate(transform, aImage.size.height, 0);
			transform = CGAffineTransformScale(transform, -1, 1);
			break;

		default:
			break;
	}

	// Now we draw the underlying CGImage into a new context, applying the
	// transform
	// calculated above.
	CGContextRef ctx = CGBitmapContextCreate(NULL, aImage.size.width, aImage.size.height,
	                                         CGImageGetBitsPerComponent(aImage.CGImage), 0,
	                                         CGImageGetColorSpace(aImage.CGImage),
	                                         CGImageGetBitmapInfo(aImage.CGImage));
	CGContextConcatCTM(ctx, transform);
	switch (aImage.imageOrientation) {
		case UIImageOrientationLeft:
		case UIImageOrientationLeftMirrored:
		case UIImageOrientationRight:
		case UIImageOrientationRightMirrored:
			// Grr...
			CGContextDrawImage(ctx, CGRectMake(0, 0, aImage.size.height, aImage.size.width), aImage.CGImage);
			break;

		default:
			CGContextDrawImage(ctx, CGRectMake(0, 0, aImage.size.width, aImage.size.height), aImage.CGImage);
			break;
	}

	// And now we just create a new UIImage from the drawing context
	CGImageRef cgimg = CGBitmapContextCreateImage(ctx);
	UIImage *img = [UIImage imageWithCGImage:cgimg];
	CGContextRelease(ctx);
	CGImageRelease(cgimg);
	return img;
} /* fixOrientation */


本文转载自:http://blog.csdn.net/u010889390/article/details/13775521

n
粉丝 0
博文 17
码字总数 433
作品 0
黄浦
私信 提问
UIImage分类大全

在处理照片的时候,最多的情况就是对UIImage进行处理。虽然UIImage使用起来比较简单,但是我们在需要处理各种繁杂需求的时候,UIImage不是都提供了相关效果的实现。很多时候需要我们自己来实...

秦明Qinmin
2017/10/10
0
0
H5 和小程序拍照图片旋转、压缩和上传

原文地址:github.com/whinc/blog/… 最近接到一个“发表评论”的需求:用户输入评论并且可以拍照或从相册选择图片上传,即支持图文评论。需要同时在 H5 和小程序两端实现,该需求处理图片的...

whinc
2018/09/29
0
0
Android自定义View——自定义ViewPager

本篇内容 第一部分:自定义ViewGroup的使用,手势识别器和Scroller滑动 第二部分:处理滑动监听,处理滑动冲突,增加ViewPager的指示器 基础概念 常见的滑动冲突:外部滑动方向和内部滑动方向...

qq_30379689
2016/08/26
0
0
Windows Phone 7:方向处理之动态布局

1.动态布局 默认情况下,Windows Phone应用程序在竖屏模式(垂直方向)下运行,当手机改变方向时我们的应用程序也应该能够根据方向的改变做出相应的布局调整。运行之前创建的HelloWindowsPhone...

虫虫
2012/02/19
554
0
OpenGLES2.0基础(3)

> 相机和投影,变换矩阵 http://blog.csdn.net/junzia Android OpenGLES2.0(三)——等腰直角三角形和彩色的三角形- http://blog.csdn.net/junzia/article/details/52817978 OpenGL ES坐标映......

shareus
2017/12/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

3_数组

3_数组

行者终成事
今天
7
0
经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
今天
7
0
使用logstash同步MySQL数据到ES

概述   在生成业务常有将MySQL数据同步到ES的需求,如果需要很高的定制化,往往需要开发同步程序用于处理数据。但没有特殊业务需求,官方提供的logstash就很有优势了。   在使用logstas...

zxiaofan666
今天
10
0
X-MSG-IM-分布式信令跟踪能力

经过一周多的鏖战, X-MSG-IM的分布式信令跟踪能力已基本具备, 特点是: 实时. 只有要RX/TX就会实时产生信令跟踪事件, 先入kafka, 再入influxdb待查. 同时提供实时sub/pub接口. 完备. 可以完整...

dev5
今天
7
0
OpenJDK之CyclicBarrier

OpenJDK8,本人看的是openJDK。以前就看过,只是经常忘记,所以记录下 图1 CyclicBarrier是Doug Lea在JDK1.5中引入的,作用就不详细描述了,主要有如下俩个方法使用: await()方法,如果当前线...

克虏伯
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部