ios开发图片,ios开发图片压缩

iOS开发所需图片常规尺寸一览

当前日期2020年5月,Xcode版本为11.4。

创新互联建站长期为1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为永春企业提供专业的网站设计制作、成都网站制作永春网站改版等技术服务。拥有十多年丰富建站经验和众多成功案例,为您定制开发。

iPhone的项目图标尺寸要求

iPad的项目图标尺寸

详细尺寸对照表

iPhone SE2代参数与iPhone8一致

iPhone SE1代参数与iPhone5一致

一些说明:

目前的刘海屏的手机有 iPhone X、XS、XSMax、 XR、 11、11Pro、11Pro Max 7款手机,其中:

1.iPhone X、iPhone XS、iPhone 11 Pro三个机型尺寸参数一致,为375x812,5.8英寸,用@3x图

2.iPhoneXR、iPhone11、iPhone XS Max、iPhone 11 Pro Max四个机型的屏幕尺寸参数一致,414x896,但是像素点不同,iPhoneXR、iPhone11用@2x图,iPhone XS Max、iPhone 11 Pro Max用@3x图

3.除了刘海屏的机型,非全面屏的机型宽高比约为0.563

iOS开发 支持哪些格式图片

我知道的有jpg, png, gif三种格式,前两张为静态图,gif为动态图,一般做加载动画。

对于静态图,当iOS应用构建的时候,Xcode会通过一种方式优化.png文件而不会优化其它文件格式。

JPG,PNG的区别:

1.相同的分辨率,保存为png要比jpg大;

2.png图片有alpha通道,因此它支持图片透明,这点在ios开发中很重要;而jpg不支持透明;

3.Xcode会对png格式进行优化处理,而对于其他图片不做处理;

如果你的图片都是xcode本地就有,那就用png;如果图片是从网络上下载的,考虑到流量以及速度,可以考虑用jpg因为它具有较高的压缩率,本地的png优化由xcode帮你做;其他格式的需要在程序运行时做优化,更耗性能,如果你的图片要求有较高的色彩饱和度、图像质量,那就用jpg。

iOS 开发中的图片压缩

在项目中经常遇到要上传图片,如果直接上传,那么会上传比较大的图片,导致费流量,刷新时加载图片时间过长,手机内存占用率高等问题。

一、先来介绍下概念:

图片的压缩其实是俩概念,

1、是 “压” 文件体积变小,但是像素数不变,长宽尺寸不变,那么质量可能下降,

2、是 “缩” 文件的尺寸变小,也就是像素数减少。长宽尺寸变小,文件体积同样会减小。

二、解决方法(以上传头像为例),先缩再压:

2.1 矫正图片方向(照片是有方向的,避免出现“倒立”的情况)

- (UIImage*)fixOrientation:(UIImage*)aImage {

// No-op if the orientation is already correct

if(aImage.imageOrientation==UIImageOrientationUp)

returnaImage;

// 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.

CGAffineTransformtransform =CGAffineTransformIdentity;

switch(aImage.imageOrientation) {

caseUIImageOrientationDown:

caseUIImageOrientationDownMirrored:

transform =CGAffineTransformTranslate(transform, aImage.size.width, aImage.size.height);

transform =CGAffineTransformRotate(transform,M_PI);

break;

caseUIImageOrientationLeft:

caseUIImageOrientationLeftMirrored:

transform =CGAffineTransformTranslate(transform, aImage.size.width,0);

transform =CGAffineTransformRotate(transform,M_PI_2);

break;

caseUIImageOrientationRight:

caseUIImageOrientationRightMirrored:

transform =CGAffineTransformTranslate(transform,0, aImage.size.height);

transform =CGAffineTransformRotate(transform, -M_PI_2);

break;

default:

break;

}

switch(aImage.imageOrientation) {

caseUIImageOrientationUpMirrored:

caseUIImageOrientationDownMirrored:

transform =CGAffineTransformTranslate(transform, aImage.size.width,0);

transform =CGAffineTransformScale(transform, -1,1);

break;

caseUIImageOrientationLeftMirrored:

caseUIImageOrientationRightMirrored:

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.

CGContextRefctx =CGBitmapContextCreate(NULL, aImage.size.width, aImage.size.height,

CGImageGetBitsPerComponent(aImage.CGImage),0,

CGImageGetColorSpace(aImage.CGImage),

CGImageGetBitmapInfo(aImage.CGImage));

CGContextConcatCTM(ctx, transform);

switch(aImage.imageOrientation) {

caseUIImageOrientationLeft:

caseUIImageOrientationLeftMirrored:

caseUIImageOrientationRight:

caseUIImageOrientationRightMirrored:

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;

}

CGImageRef cgimg =CGBitmapContextCreateImage(ctx);

UIImage *img = [UIImageimageWithCGImage:cgimg];

CGContextRelease(ctx);

CGImageRelease(cgimg);

return img;

}

2.2 拿到上面矫正过的图片,缩小图片尺寸,调用下面方法传入newSize,如(200,200):

+ (UIImage*)imageWithImageSimple:(UIImage*)image scaledToSize:(CGSize)newSize

{

UIGraphicsBeginImageContext(newSize);

[imagedrawInRect:CGRectMake(0,0,newSize.width,newSize.height)];

UIImage* newImage =UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return newImage;

}

2.3 将2.2的图片再压,这个方法可以重复压

//调整大小

NSData *imageData =UIImageJPEGRepresentation(newImage,rate);

NSUIntegersizeOrigin = [image Datalength];//多少KB

NSUIntegersizeOriginKB = sizeOrigin /1024;//多少KB

2.4 上传头像

调用后台接口,把imageData二进制数据上传即可

总结:对图片压缩处理时,在保证图片清晰度变化不大时,减小图片文件大小。方法2.2中的newSize 和 2.3中的rate要以实际效果来设置,我在自己项目中上传的头像最终尺寸是200*200像素,大小为4KB左右。

[img]

iOS 开发-UIImageViews(图片)的使用

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bgImage"]]; 

创建并设置默认图, 也可以

UIImageView*imageView = [[UIImageView alloc] init];

imageView.image= [UIImageimageNamed:@"bgImage"];

还可以这样先设置imageview的大, 在设置图片

UIImageView*imageView = [[UIImageView alloc] initWithFrame:(CGRectMake(0,144,SCREEN_Width,50))];

imageView.image= [UIImageimageNamed:@"bgImage"];

由此可看imageview的frame可以这样设置

imageView.frame=CGRectMake(0,144,SCREEN_Width,50);

通常我们使用的的imageview都会添加圆角边框

imageView.layer.masksToBounds = YES;

imageView.layer.cornerRadius=25;

imageView.layer.borderColor = [UIColor blueColor].CGColor;

imageView.layer.borderWidth=1;

这个圆角和边框像view和label以及button的设置方式都是一样的 当然imageview也一样

imageView.backgroundColor= [UIColorclearColor]; 图片设置背景颜色, 我通常使用clearColor  透明

 imageView.userInteractionEnabled = YES; 图片设置成可交互, 设置为NO则不能交互

[self.viewaddSubview: imageView]; 添加视图也可叫做显示视图

设置图片内容的布局方式 imageView.contentMode

这个属性是用来设置图片的显示方式,如居中、居右,是否缩放等

imageView.contentMode = UIViewContentModeScaleAspectFit;

UIViewContentMode contentMode枚举类型

    (1)  UIViewContentModeScaleToFill;     默认,对图片进行拉伸处理(不是按比例),是充满bouns

  (2)  UIViewContentModeScaleAspectFit;     按原图比例进行拉伸,是图片完全展示在bouns中

    (3)  UIViewContentModeScaleAspectFill;     按原图比例填充,使图片展示在bouns中,可能只显示部分

    (4)  UIViewContentModeRedraw;     重划边界变化(重设 - setNeedsDisplay)

    (5)  UIViewContentModeCenter;     图片显示在imageview的正中间,原图大小

    (6)  UIViewContentModeTop;     图片显示在imageview的上部,原图大小

    (7)  UIViewContentModeBottom;     图片显示在imageview的下部,原图大小

    (8)  UIViewContentModeLeft;     图片显示在imageview的左部,原图大小

    (9)  UIViewContentModeRight;     图片显示在imageview的右部,原图大小

    (10)  UIViewContentModeTopLeft;     图片显示在imageview的左上部,原图大小

    (11)  UIViewContentModeTopRight;     图片显示在imageview的右上部,原图大小

    (12)  UIViewContentModeBottomLeft;     图片显示在imageview的左下部,原图大小

    (13)  UIViewContentModeBottomRight;     图片显示在imageview的右下部,原图大小

imageView.alpha = 1.0;    设置图片透明度

   NSString *path1 = [[NSBundle mainBundle] pathForResource:@"1" ofType:@"jpg"];

   NSString *path2 = [[NSBundle mainBundle] pathForResource:@"2" ofType:@"jpg"];

   NSString *path3 = [[NSBundle mainBundle] pathForResource:@"3" ofType:@"jpg"];

   imageView.animationImages = @[[UIImage imageWithContentsOfFile:path1],[UIImage imageWithContentsOfFile:path2],[UIImage imageWithContentsOfFile:path3]];

   imageView.animationDuration = 5.0f;    设置循环一次的时间

   imageView.animationRepeatCount = 0;    // 设置循环次数(0为无线循环)

   [imageView startAnimating];            // 开始动画

   [imageView stopAnimating];              // 停止动画

NSData *imageData = [NSData dataWithContentsOfFile:path];

UIImage *image4 = [UIImage imageWithData:imageData];

NSString *path = [[NSBundle mainBundle] pathForResource:@"1" ofType:@"jpg"];

UIImage *image2 = [UIImage imageWithContentsOfFile:path];

ImageView.hidden = NO;    隐藏或者显示图片 YES为隐藏

[ImageView sizeToFit];    将图片尺寸调整为与内容图片相同

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImageView:)]; // 设置手势

[ImageView addGestureRecognizer:singleTap]; // 给图片添加手势

iOS开发图片压缩的两种方式2019-01-18

工作中遇到需要将图片压缩之后上传的需求。经过多方查询资料,目前总结出来两种方式总结一下备用。

UIImageJPEGRepresentation(image, compression)

这个方法可以将iPhone拍摄的照片压缩到几百Kb的极限值,到极限值之后不管compression这个参数多小,该函数返回的数据大小都不会再改变。也就是说这个方法的压缩是有最小值的,得到的是jpg格式。

另外有一个方法UIImagePNGRepresentation(#UIImage * _Nonnull image#)这个方法得到的数据会比之前那个方法得到的数据占用空间更大。

为了达到压缩的目的,这种方法是有损的,就是会降低图片质量。

这种方法的到的图片,newSize越小质量越差,但是得到的图片占用内存越小。设置多大的newSize自己斟酌决定。

综合一下自己平常在开发中常用的就是,先使用第一种方法保持精度不变,compression选择0.6或者0.7进行第一次压缩,然后再用第二种方法进行尺寸压缩,得到的就是我们最终想要的图片。

iOS开发 ,将多张图片叠加绘制到一起

这种绘制是根据图片的像素比例 等比例进行绘制的,在选择图片和创建展示图片的imageView 时,注意查看尺寸 注:绘图时使用  [UIScreen mainScreen].scale 可以是图片更清晰 UIGraphicsBeginImageContextWithOptions(image.size, NO, [UIScreen mainScreen].scale);//这样就不模糊了

//图片上添加文字 详细版

- (UIImage*)text:(NSString*)text addToView:(UIImage*)image{

//设置字体样式

UIFont*font = [UIFont fontWithName:@"Arial-BoldItalicMT"size:100];

NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:text];

[str addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(0, 1)];

[str addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:100] range:NSMakeRange(0, text.length)];

//    CGSize textSize = [text sizeWithAttributes:dict];

CGSize textSize = [str size];

//绘制上下文

UIGraphicsBeginImageContext(image.size);

//UIGraphicsBeginImageContextWithOptions(image.size, NO, [UIScreen mainScreen].scale);//这样就不模糊了

[image drawInRect:CGRectMake(0,0, image.size.width, image.size.height)];

//    int border =10;

CGRect re = {CGPointMake((image.size.width- textSize.width)/2, 200), textSize};

//    CGRect rect = CGRectMake(0, 0, image.size.width, 500);

//此方法必须写在上下文才生效

[str drawInRect:re ];

UIImage*newImage =UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return newImage;

}

//修改图片尺寸

- (UIImage*)imageWithImageSimple:(UIImage*)image scaledToSize:(CGSize)newSize

{

// Create a graphics image context

UIGraphicsBeginImageContext(newSize);//这样压缩的图片展示出来会很模糊

//UIGraphicsBeginImageContextWithOptions(image.size, NO, [UIScreen mainScreen].scale);//这样就不模糊了

//UIGraphicsBeginImageContextWithOptions(image.size, NO, [UIScreen mainScreen].scale);//这样就不模糊了

// Tell the old image to draw in this new context, with the desired

// new size

[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];

// Get the new image from the context

UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();

// End the context

UIGraphicsEndImageContext();

// Return the new image.

return newImage;

}

//圆角

- (UIImage *) getRadioImaeg:(NSString *)imageName1{

UIImage *image1 = [UIImage imageNamed:imageName1];

UIGraphicsBeginImageContextWithOptions(image1.size, 0, 0);

CGContextRef ctx = UIGraphicsGetCurrentContext();

CGRect rect = CGRectMake(00, 0, image1.size.width, image1.size.width);

CGContextAddEllipseInRect(ctx, rect);

CGContextClip(ctx);

[image1 drawInRect:rect];

UIImage *img = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return img;

}

//图片叠加

- (UIImage *)addImage:(NSString *)imageName1 withImage:(NSString *)imageName2 {

UIImage *image1 = [UIImage imageNamed:imageName1];

UIImage *image2 = [self getRadioImaeg:@"333"];

UIGraphicsBeginImageContext(image1.size);

//UIGraphicsBeginImageContextWithOptions(image.size, NO, [UIScreen mainScreen].scale);//这样就不模糊了

[image1 drawInRect:CGRectMake(0, 0, image1.size.width, image1.size.height)];

[image2 drawInRect:CGRectMake((image1.size.width - image2.size.width)/2,(image1.size.height - image2.size.height)/2, image2.size.width, image2.size.height)];

UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return resultingImage;

}


当前标题:ios开发图片,ios开发图片压缩
网页链接:http://cdiso.cn/article/dsopijg.html

其他资讯