ios - 保存许多图像 IOS 时质量下降

标签 ios uigraphicscontext

我在保存许多图像时遇到问题。我正在使用 UIGraphicsGetImageFromCurrentImageContext。例如我的输入图像是 200kb,输出图像只有 35kb。我怎样才能在不损失质量的情况下保存我的图像。这是代码示例:

BOOL first = YES;
mSavedImage = mImageView.image;
UIGraphicsBeginImageContextWithOptions(mImageView.frame.size, YES, 0.0);
DLog(@" FRAME %@",NSStringFromCGSize(mImageView.frame.size));
DLog(@"%i",mEditingView.subviews.count);
for (NSInteger i = mEditingView.subviews.count-1; i>=0; i--){
    if ([[mEditingView.subviews objectAtIndex:i] isKindOfClass:[FSShopItem class]]) {
        DLog(@"is shopitem");

        FSShopItem *lPrewSubview = [mEditingView.subviews objectAtIndex:i];
        FSShopItem *lSubview = nil;
        if (first) {
            [mImageView.image drawInRect:mImageView.frame];
            first = NO;
        }
        else{
            lSubview = [mEditingView.subviews objectAtIndex:i+1];                   
            [lSubview.image drawInRect:lSubview.frame];
        }
        DLog(@" FRAME %@",NSStringFromCGRect(lPrewSubview.frame));
        [lPrewSubview.image drawInRect:lPrewSubview.frame];
    }
}
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    UIImage *lImageForLogo = [UIImage imageNamed:@"ipad_logo.png"];
    CGRect lRect = CGRectMake(mEditingView.frame.size.width - lImageForLogo.size.width, mEditingView.frame.size.height - lImageForLogo.size.height, lImageForLogo.size.width, lImageForLogo.size.height);
    [lImageForLogo drawInRect:lRect];
}
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
    UIImage *lImageForLogo = [UIImage imageNamed:@"iphone_logo.png"];
    CGRect lRect = CGRectMake(mEditingView.frame.size.width - lImageForLogo.size.width, mEditingView.frame.size.height - lImageForLogo.size.height, lImageForLogo.size.width, lImageForLogo.size.height);
    [lImageForLogo drawInRect:lRect];

}
mSavedImage =UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return mSavedImage;

最佳答案

我假设 mImageView.frame.size 矩形比 logo.png 图像小得多,因此它们绘制在比原始矩形更小的矩形中尺寸。您需要做的是创建一个更大的上下文——比如大 4 倍或 8 倍。现在核心图像将有更多的细节(当然也更大)。然后,您可以在较小的矩形中渲染此图像,并降低分辨率,或者以其原始大小显示它以获得全分辨率。

这里的关键点是您使用的是像素 - 而不是矢量图 - 因此如果您在比其原始尺寸更小的矩形中绘制图像,您将丢失细节。

关于ios - 保存许多图像 IOS 时质量下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17591648/

相关文章:

ios - 如何快速创建 UnsafeMutablePointer<CGPoint> 对象

ios - Facebook SDK 4.0 iOS不再快速切换到设备上安装的Facebook APP

ios - 什么是图形上下文? (iOS)

ios - 应用程序未出现在 "Open in"菜单中

c++ - 自动透视校正 OpenCV

ios - 尝试在没有 UI 锁定的情况下将进程发送到后台

ios - iOS CGContext Edge没有抗锯齿

ios - 使用 UIBezierPath 异步剪辑 UIImage

ios - 在屏幕不在标签栏上的情况下启动 uitabviewcontroller

ios - 带阴影的 UIView - 应用 renderInContext 时速度较慢