iOS中图片的一些处理,磨砂,压缩,,

2023-12-06 02:08
文章标签 图片 处理 压缩 ios 磨砂

本文主要是介绍iOS中图片的一些处理,磨砂,压缩,,,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

有时候,我们在进行上传图片,或是进行处理图片的时候会出现修改图片大小,进行压缩处理,这时候我们就会用到下面的方法
/**
* 图片压缩处理
*
* @param type 压缩类型(大中小)
*
* @return 压缩后的图片
*/
-(UIImage *) compressionImage:(NSInteger) type;

/**
* 修改图像尺寸并压缩大小
*
* @param image 图片
*
* @return 压缩后的图片
*/
+ (UIImage )scaleAndRotateImage:(UIImage )image;

/**
* 头像图片压缩
*
* @param image 图片
*
* @return 压缩后的图片
*/
+ (UIImage )scaleUserImage:(UIImage )image;

/**
* 将图片做磨砂处理
*
* @param blur 磨砂度
*
* @return
*/
- (UIImage *)blurryImageWithBlurLevel:(CGFloat)blur;
- 这是一个处理图片进行磨砂处理的样子

@implementation UIImage(Category)

/**
* 图片压缩处理
*
* @param type 压缩类型(大中小)
*
* @return 压缩后的图片
*/
-(UIImage *) compressionImage:(NSInteger) type {
CGFloat compressionQuality;
switch (type) {
case image_original:
case image_big:
compressionQuality = 1.0f;
break;
case image_middle:
compressionQuality = 0.8f;
break;
case image_small:
compressionQuality = 0.6f;
break;
default:
compressionQuality = 0;
break;
}
return [UIImage imageWithData:UIImageJPEGRepresentation(self, compressionQuality)];
}

/**
* 等比例压缩
*
* @param sourceImage
* @param size
*
* @return
*/
-(UIImage ) imageCompressForSize:(UIImage )sourceImage targetSize:(CGSize)size{
UIImage *newImage = nil;
CGSize imageSize = sourceImage.size;
CGFloat width = imageSize.width;
CGFloat height = imageSize.height;
CGFloat targetWidth = size.width;
CGFloat targetHeight = size.height;
CGFloat scaleFactor = 0.0;
CGFloat scaledWidth = targetWidth;
CGFloat scaledHeight = targetHeight;
CGPoint thumbnailPoint = CGPointMake(0.0, 0.0);
if(CGSizeEqualToSize(imageSize, size) == NO){
CGFloat widthFactor = targetWidth / width;
CGFloat heightFactor = targetHeight / height;
if(widthFactor > heightFactor){
scaleFactor = widthFactor;
}
else{
scaleFactor = heightFactor;
}
scaledWidth = width * scaleFactor;
scaledHeight = height * scaleFactor;
if(widthFactor > heightFactor){
thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5;
}else if(widthFactor < heightFactor){
thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;
}
}

UIGraphicsBeginImageContext(size);CGRect thumbnailRect = CGRectZero;
thumbnailRect.origin = thumbnailPoint;
thumbnailRect.size.width = scaledWidth;
thumbnailRect.size.height = scaledHeight;
[sourceImage drawInRect:thumbnailRect];
newImage = UIGraphicsGetImageFromCurrentImageContext();if(newImage == nil){NSLog(@"scale image fail");
}UIGraphicsEndImageContext();return newImage;

}

/**
* 修改图像尺寸并压缩大小
*
* @param image 图片
*
* @return 压缩后的图片
*/
- (UIImage )scaleAndRotateImage:(UIImage )image {
CGSize imageSize = image.size;
CGFloat width = imageSize.width;
CGFloat height = imageSize.height;

CGFloat thumbSize = 0.8;CGFloat tempW = 480;
if (width == 3264 || width == 2592) {tempW = 1024;thumbSize = 0.6;
} else if (width == 2448 || width == 1936) {tempW = 720;thumbSize = 0.6;
} else if (width <= 480) {tempW = screenWidth;
} else if (width > 480 && width <= 1024) {tempW = width;
} else if (width > 1024) {tempW = 1024;
}CGFloat scaleFactor = 0.0;
CGPoint thumbPoint = CGPointMake(0.0,0.0);
CGFloat widthFactor = tempW / width;
CGFloat thumbHeight = tempW * (height/width);
CGFloat heightFactor = thumbHeight / height;if (widthFactor > heightFactor)  {scaleFactor = widthFactor;
}else {scaleFactor = heightFactor;
}CGFloat scaledWidth  = width * scaleFactor;
CGFloat scaledHeight = height * scaleFactor;if (widthFactor > heightFactor) {thumbPoint.y = (thumbHeight - scaledHeight) * 0.5;
} else if(widthFactor < heightFactor) {thumbPoint.x = (tempW - scaledWidth) * 0.5;
}UIGraphicsBeginImageContext(CGSizeMake(tempW, thumbHeight));
CGRect thumbRect = CGRectZero;
thumbRect.origin = thumbPoint;
thumbRect.size.width  = scaledWidth;
thumbRect.size.height = scaledHeight;
[image drawInRect:thumbRect];
UIImage *thumbImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData *thumbImageData = UIImageJPEGRepresentation(thumbImage, thumbSize);
CGFloat compressionQuality = thumbSize;while (thumbImageData.length > 280000 && compressionQuality > 0.5) {thumbImageData = UIImageJPEGRepresentation(thumbImage, compressionQuality -= 0.1);
}UIImage *aimage = [UIImage imageWithData: thumbImageData];return aimage;

}

/**
* 头像压缩
*
* @param image 图片
*
* @return 压缩后的图片
*/
+ (UIImage )scaleUserImage:(UIImage )image {
CGSize imageSize = image.size;
CGFloat width = imageSize.width;
CGFloat height = imageSize.height;

CGFloat thumbSize = 0.8;CGFloat tempW = width;if (width > 1024) {tempW = 640;
}CGFloat scaleFactor = 0.0;
CGPoint thumbPoint = CGPointMake(0.0,0.0);
CGFloat widthFactor = tempW / width;
CGFloat thumbHeight = tempW * (height/width);
CGFloat heightFactor = thumbHeight / height;if (widthFactor > heightFactor)  {scaleFactor = widthFactor;
}else {scaleFactor = heightFactor;
}CGFloat scaledWidth  = width * scaleFactor;
CGFloat scaledHeight = height * scaleFactor;if (widthFactor > heightFactor) {thumbPoint.y = (thumbHeight - scaledHeight) * 0.5;
} else if(widthFactor < heightFactor) {thumbPoint.x = (tempW - scaledWidth) * 0.5;
}UIGraphicsBeginImageContext(CGSizeMake(tempW, thumbHeight));
CGRect thumbRect = CGRectZero;
thumbRect.origin = thumbPoint;
thumbRect.size.width  = scaledWidth;
thumbRect.size.height = scaledHeight;
[image drawInRect:thumbRect];
UIImage *thumbImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData *thumbImageData = UIImageJPEGRepresentation(thumbImage, thumbSize);
CGFloat compressionQuality = thumbSize;while (thumbImageData.length > 280000 && compressionQuality > 0.5) {thumbImageData = UIImageJPEGRepresentation(thumbImage, compressionQuality -= 0.1);
}UIImage *aimage = [UIImage imageWithData: thumbImageData];return aimage;

}

/**
* 将图片做磨砂处理
*
* @param blur 磨砂度
*
* @return
*/
- (UIImage *)blurryImageWithBlurLevel:(CGFloat)blur {
int boxSize = (int)(blur * 40);
boxSize = boxSize - (boxSize % 2) + 1;

CGImageRef img = self.CGImage;
vImage_Buffer inBuffer, outBuffer;
vImage_Error error;
void *pixelBuffer;//create vImage_Buffer with data from CGImageRef
CGDataProviderRef inProvider = CGImageGetDataProvider(img);
CFDataRef inBitmapData = CGDataProviderCopyData(inProvider);inBuffer.width = CGImageGetWidth(img);
inBuffer.height = CGImageGetHeight(img);
inBuffer.rowBytes = CGImageGetBytesPerRow(img);inBuffer.data = (void*)CFDataGetBytePtr(inBitmapData);//create vImage_Buffer for output
pixelBuffer = malloc(CGImageGetBytesPerRow(img) * CGImageGetHeight(img));if(pixelBuffer == NULL)NSLog(@"No pixelbuffer");outBuffer.data = pixelBuffer;
outBuffer.width = CGImageGetWidth(img);
outBuffer.height = CGImageGetHeight(img);
outBuffer.rowBytes = CGImageGetBytesPerRow(img);//perform convolution
error = vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer, NULL, 0, 0, boxSize, boxSize, NULL, kvImageEdgeExtend)
?: vImageBoxConvolve_ARGB8888(&outBuffer, &inBuffer, NULL, 0, 0, boxSize, boxSize, NULL, kvImageEdgeExtend)
?: vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer, NULL, 0, 0, boxSize, boxSize, NULL, kvImageEdgeExtend);if (error) {NSLog(@"error from convolution %ld", error);
}CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef ctx = CGBitmapContextCreate(outBuffer.data,outBuffer.width,outBuffer.height,8,outBuffer.rowBytes,colorSpace,(CGBitmapInfo)kCGImageAlphaNoneSkipLast);
CGImageRef imageRef = CGBitmapContextCreateImage (ctx);
UIImage *returnImage = [UIImage imageWithCGImage:imageRef];//clean up
CGContextRelease(ctx);
CGColorSpaceRelease(colorSpace);free(pixelBuffer);
//free(pixelBuffer2);
CFRelease(inBitmapData);
CGImageRelease(imageRef);
return returnImage;

}
但是要记得在实现的时候记得倒入两个框架
一#import

impor

这篇关于iOS中图片的一些处理,磨砂,压缩,,的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/459998

相关文章

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

Spring Boot 中的默认异常处理机制及执行流程

《SpringBoot中的默认异常处理机制及执行流程》SpringBoot内置BasicErrorController,自动处理异常并生成HTML/JSON响应,支持自定义错误路径、配置及扩展,如... 目录Spring Boot 异常处理机制详解默认错误页面功能自动异常转换机制错误属性配置选项默认错误处理

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

使用zip4j实现Java中的ZIP文件加密压缩的操作方法

《使用zip4j实现Java中的ZIP文件加密压缩的操作方法》本文介绍如何通过Maven集成zip4j1.3.2库创建带密码保护的ZIP文件,涵盖依赖配置、代码示例及加密原理,确保数据安全性,感兴趣的... 目录1. zip4j库介绍和版本1.1 zip4j库概述1.2 zip4j的版本演变1.3 zip4

Java堆转储文件之1.6G大文件处理完整指南

《Java堆转储文件之1.6G大文件处理完整指南》堆转储文件是优化、分析内存消耗的重要工具,:本文主要介绍Java堆转储文件之1.6G大文件处理的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言文件为什么这么大?如何处理这个文件?分析文件内容(推荐)删除文件(如果不需要)查看错误来源如何避

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

Java docx4j高效处理Word文档的实战指南

《Javadocx4j高效处理Word文档的实战指南》对于需要在Java应用程序中生成、修改或处理Word文档的开发者来说,docx4j是一个强大而专业的选择,下面我们就来看看docx4j的具体使用... 目录引言一、环境准备与基础配置1.1 Maven依赖配置1.2 初始化测试类二、增强版文档操作示例2.

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过