iOS 이미지 압축 크기 제한
1. 두 가지 이미지 압축 방법
그림을 압축하는 두 가지 방법: 그림의 질량(Quality), 그림의 사이즈(Size)를 압축한다.
압축 이미지 품질
NSData *data = UIImageJPEGRepresentation(image, compression);
UIImage *resultImage = [UIImage imageWithData:data];
UIImage와 NSData의 상호 전환을 통해 JPEG 이미지의 질을 줄여 이미지를 압축합니다.UIImageJPEGrepresentation::두 번째 인자compression 수치는 0.0~1.0입니다. 값이 작을수록 그림의 질이 낮고 그림 파일은 자연히 작아집니다.
압축 이미지 크기
UIGraphicsBeginImageContext(size);
[image drawInRect:CGRectMake(0, 0, size.width, size.height)];
resultImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
필요한 그림 크기 크기를 지정하면, ResultImage는 원본 그림의 크기를 크기 크기로 그립니다
2. 그림을 압축하여 그림 파일을 지정한 크기보다 작게 한다
만약 사진의 선명도에 대한 요구가 높지 않고 사진의 업로드, 다운로드 속도가 빠르다면 사진을 업로드할까요?>그림을 압축해야 합니다.어느 정도로 압축하는지는 구체적인 상황을 보아야 하지만, 일반적으로 그림 파일의 최대 값을 설정한다. 예를 들어 100KB이다.상소의 두 가지 방법으로 그림을 압축할 수 있다.그림으로 전환된 NSData 대상이 데이터라고 가정하고 데이터를 통해length는 그림의 바이트 크기를 얻을 수 있습니다.
압축 이미지 품질
비교적 쉽게 생각할 수 있는 방법은 그림이 지정한 크기(maxLength)보다 조금 작을 때까지 순환을 통해 그림의 질을 점차적으로 줄이는 것이다.
, , ; , 。
- (NSData *)compressQualityWithMaxLength:(NSInteger)maxLength {// , , 。
CGFloat compression = 1;
NSData *data = UIImageJPEGRepresentation(self, compression);
while (data.length > maxLength && compression > 0) {
compression -= 0.02;
data = UIImageJPEGRepresentation(self, compression); // When compression less than a value, this code dose not work
}
return data;
}//
- (NSData *)compressQualityWithMaxLength:(NSInteger)maxLength {// 。
CGFloat compression = 1;
NSData *data = UIImageJPEGRepresentation(self, compression);
if (data.length < maxLength) return data;
CGFloat max = 1;
CGFloat min = 0;
for (int i = 0; i < 6; ++i) {
compression = (max + min) / 2;
data = UIImageJPEGRepresentation(self, compression);
if (data.length < maxLength * 0.9) {
min = compression;
} else if (data.length > maxLength) {
max = compression;
} else {
break;
}
}
return data;
}
압축 이미지 크기
이전과 유사하게 비교적 쉽게 생각할 수 있는 방법은 그림의 크기를 지정한 크기(maxLength)보다 조금 작을 때까지 순환을 통해 점차적으로 줄이는 것이다.구체적인 코드가 생략되다.같은 문제는 순환 횟수가 많고 효율이 낮으며 시간이 오래 걸린다는 것이다.이분법으로 효율을 높일 수 있으며 구체적인 코드는 생략할 수 있다.이분법보다 더 좋고 압축 횟수가 적으며 그림을 압축한 후 지정한 크기보다 꼭 작게 할 수 있는 또 다른 방법을 소개한다(
, ( )。
-(NSData *)compressBySizeWithMaxLength:(NSUInteger)maxLength{
UIImage *resultImage = self;
NSData *data = UIImageJPEGRepresentation(resultImage, 1);
NSUInteger lastDataLength = 0;
while (data.length > maxLength && data.length != lastDataLength) {
lastDataLength = data.length;
CGFloat ratio = (CGFloat)maxLength / data.length;
CGSize size = CGSizeMake((NSUInteger)(resultImage.size.width * sqrtf(ratio)),
(NSUInteger)(resultImage.size.height * sqrtf(ratio))); // Use NSUInteger to prevent white blank
UIGraphicsBeginImageContext(size);
// Use image to draw (drawInRect:), image is larger but more compression time
// Use result image to draw, image is smaller but less compression time
[resultImage drawInRect:CGRectMake(0, 0, size.width, size.height)];
resultImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
data = UIImageJPEGRepresentation(resultImage, 1);
}
return data;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.