如何在ios中减小高度和宽度来缩小图像尺寸?

时间:2013-01-09 09:14:43

标签: ios

请指导我。如何在ios中减小高度和宽度来缩小图像尺寸?

我将通过设备相机拍照。大小约250kb。现在我希望在不调整高度和宽度的情况下减少100KB。

有可能吗?

请分享您的观点。

3 个答案:

答案 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)

快乐编码...

请使用这种不会降低文件质量也不会降低图像高度宽度的逻辑。

您可以在不损失图像质量的情况下进行更好的增强。

在这里您需要根据您的要求管理 ma​​xByte

执行此增强后,它还会释放内存。

这是 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)
        }
    }}