请指导我。如何在不减少 ios 中的高度和宽度的情况下减小图像的大小?
我将通过设备相机拍照。大小约为 250kb。现在我想在不调整高度和宽度的情况下减少 100KB。
有可能做到吗?
请分享您的观点。
请指导我。如何在不减少 ios 中的高度和宽度的情况下减小图像的大小?
我将通过设备相机拍照。大小约为 250kb。现在我想在不调整高度和宽度的情况下减少 100KB。
有可能做到吗?
请分享您的观点。
将 jpg 图像转换为 jpeg 将减小大小。尝试这个。
[UIImage imageWithData:UIImageJPEGRepresentation(img, 0.01f)];
我通常使用此功能来压缩我在此答案中找到的 iOS 上的图像。
+ (NSData*)imageDataWithCGImage:(CGImageRef)CGimage UTType:(const CFStringRef)imageUTType desiredCompressionQuality:(CGFloat)desiredCompressionQuality
{
NSData* result = nil;
CFMutableDataRef destinationData = CFDataCreateMutable(kCFAllocatorDefault, 0);
CGImageDestinationRef destinationRef = CGImageDestinationCreateWithData(destinationData, imageUTType, 1, NULL);
CGImageDestinationSetProperties(destinationRef, (CFDictionaryRef)[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithFloat:desiredCompressionQuality], (NSString*)kCGImageDestinationLossyCompressionQuality, nil]);
if (destinationRef != NULL)
{
CGImageDestinationAddImage(destinationRef, CGimage, NULL);
if (CGImageDestinationFinalize(destinationRef))
{
result = [NSData dataWithData:(NSData*)destinationData];
}
}
if (destinationData)
{
CFRelease(destinationData);
}
if (destinationRef)
{
CFRelease(destinationRef);
}
return result;
}
图像类型可以是 kUTTypePNG,但质量参数很可能不起作用。根据您的需要,它也可以是 kUTTypeJPEG2000。
快乐的编码...
请使用此逻辑,它不会降低文件质量,也不会降低图像高度宽度。
在不损失图像质量的情况下,您可以执行更好的增强。
在这里,您需要根据您的要求管理maxByte 。
它还会在执行此增强功能后释放内存。
这是UIImage 扩展...
extension UIImage {
func resize(fileName: String, maxByte: Int = 800000, folderName: String, completion: @escaping (UIImage?) -> ()) {
DispatchQueue.global(qos: .userInitiated).async {
guard let currentImageSize = self.jpegData(compressionQuality: 1.0)?.count else { return }//completion(nil) }
var imageSize = currentImageSize
var percentage: CGFloat = 1.0
var generatedImage: UIImage? = self
let percantageDecrease: CGFloat = imageSize < 10000000 ? 0.1 : 0.3
while imageSize > maxByte && percentage > 0.5 {
print("Performing \(percentage)")
let canvas = CGSize(width: self.size.width * percentage,
height: self.size.height * percentage)
let format = self.imageRendererFormat
format.opaque = false
generatedImage = UIGraphicsImageRenderer(size: canvas, format: format).image {
_ in self.draw(in: CGRect(origin: .zero, size: canvas))
}
guard let generatedImageSize = generatedImage?.jpegData(compressionQuality: 1.0)?.count else { return }//completion(nil) }
imageSize = generatedImageSize
percentage -= percantageDecrease
}
completion(generatedImage)
}
}}