我有一個博客應用程序,我正在製作。要撰寫新條目,有一個「撰寫條目」視圖,用戶可以選擇照片並輸入文本。對於照片,有一個UIImageView佔位符,點擊此按鈕後,自定義ImagePicker出現,用戶可以選擇最多3張照片。調整ALAsset照片需要很長時間。任何方式在這個?
這就是問題出現的地方。我不需要ALAsset的全分辨率照片,但同時縮略圖的分辨率也太低,無法使用。
所以我現在在做的是將全分辨率照片調整到更小的尺寸。但是,這需要一些時間,尤其是在將3張照片調整爲較小尺寸時。
這裏是剪斷顯示我在做什麼代碼:
ALAssetRepresentation *rep = [[dict objectForKey:@"assetObject"] defaultRepresentation];
CGImageRef iref = [rep fullResolutionImage];
if (iref)
{
CGRect screenBounds = [[UIScreen mainScreen] bounds];
UIImage *previewImage;
UIImage *largeImage;
if([rep orientation] == ALAssetOrientationUp) //landscape image
{
largeImage = [[UIImage imageWithCGImage:iref] scaledToWidth:screenBounds.size.width];
previewImage = [[UIImage imageWithCGImage:iref] scaledToWidth:300];
}
else // portrait image
{
previewImage = [[[UIImage imageWithCGImage:iref] scaledToHeight:300] imageRotatedByDegrees:90];
largeImage = [[[UIImage imageWithCGImage:iref] scaledToHeight:screenBounds.size.height] imageRotatedByDegrees:90];
}
}
這裏,從全分辨率圖像,我創建了兩個圖像:一個預覽圖像(在長端最大300像素)和大圖像(最長960像素或640像素)。預覽圖像是「新條目」預覽中應用程序本身顯示的內容。大圖像是上傳到服務器時將使用的圖像。
我使用來調整實際的代碼,我從什麼地方抓起這裏:
-(UIImage*)scaledToWidth:(float)i_width
{
float oldWidth = self.size.width;
float scaleFactor = i_width/oldWidth;
float newHeight = self.size.height * scaleFactor;
float newWidth = oldWidth * scaleFactor;
UIGraphicsBeginImageContext(CGSizeMake(newWidth, newHeight));
[self drawInRect:CGRectMake(0, 0, newWidth, newHeight)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
我錯了在這裏做的事情?就目前而言,ALAsset縮略圖的清晰度太低,與此同時,我不需要整個完整的分辨率。現在都在工作,但調整大小需要一些時間。這只是一個必要的結果嗎?
謝謝!
老兄,你是個天才:) – Stavash 2015-06-17 07:34:34