请指导我。如何在ios中减小高度和宽度来缩小图像尺寸?
我将通过设备相机拍照。大小约250kb。现在我希望在不调整高度和宽度的情况下减少100KB。
有可能吗?
请分享您的观点。
答案 0 :(得分:1)
将jpg图像转换为jpeg会减小尺寸。试试这个。
[UIImage imageWithData:UIImageJPEGRepresentation(img, 0.01f)];
答案 1 :(得分:0)
我通常使用此功能来压缩我在this answer上找到的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满足您的需求。
答案 2 :(得分:0)
快乐编码...
请使用这种不会降低文件质量也不会降低图像高度宽度的逻辑。
您可以在不损失图像质量的情况下进行更好的增强。
在这里您需要根据您的要求管理 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)
}
}}