2013-07-11 97 views
1

我遇到了保存很多圖像的問題。我正在使用UIGraphicsGetImageFromCurrentImageContext。例如,我的輸入圖像是200kb,輸出圖像只有35 kb。如何保存我的圖像而不損失質量。下面是代碼示例:保存很多圖像時質量下降IOS

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; 
+0

您是否在嘗試使用縮放/平移保存圖像?這是你的目標嗎? – Wain

+0

不,我試圖保存所有圖像我有一張圖片 –

回答

1

我會假設mImageView.frame.size矩形比logo.png圖像小得多,所以他們得出比其原始尺寸更小的矩形。你需要做的是創建一個更大的上下文 - 比如4或8倍大。現在覈心圖像會有更多的細節(當然也會更大)。然後,您可以使用較小的矩形渲染此圖像並丟失分辨率,或以完全分辨率的原始大小顯示它。

這裏的關鍵是你正在處理像素 - 而不是矢量圖 - 所以如果你用比它的原始大小更小的矩形繪製圖像,你將失去細節。

0

不是直接使用圖像視圖幀,而是根據屏幕大小(幀座標空間)和全尺寸之間的縮放因子來決定結果圖像應該有多大,然後使用CGRectInset對幀進行變形。