2013-08-14 3 views
0

у меня есть этот код, где self является UIImage объекта:ИОС: UIImage масштаб, UIImage и его соответствующие CGimage не являются идентичными

CGFloat scale = [sideSize floatValue]/MIN(self.size.width, self.size.height); 
UIGraphicsBeginImageContextWithOptions(CGSizeMake(self.size.width*scale,self.size.height*scale), NO, 0.0); 
[self drawInRect:CGRectMake(0, 0, self.size.width*scale, self.size.height*scale)]; 
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
SBLog(@"%f, %f", newImage.size.width, newImage.size.height); 
return newImage; 

Но когда я использую функцию UIImagePNGRepresentation для получения байт данных для передачи через Интернет, я имеют байты изображения с другим размером после шкалы.

Более того после этого кода, когда я использую [newImage CGImage], я получаю такой же плохую величину.

Итак, я думаю, что UIImagePNGRepresentation использует CGImage для получения байтов данных из изображения.

Итак, как сделать идентичные UIImage и CGImage?

+0

То, что вы точно подразумеваете под «как сделать идентичную UIImage и CGImage»? – CodenameLambda1

+0

Сделайте размер идентичным. Я хочу получить данные масштабированного изображения и передать их, поэтому я не хочу передавать большее изображение. Как я могу получить представление в байтах масштабированного изображения. – Logioniz

+0

Это означает, что у вас есть определенный предел размера для изображения, и если изображение больше этого предела, вы хотите уменьшить изображение до его предельного размера и затем перенести его. Это верно ? – CodenameLambda1

ответ

0
//This method will resize the original image to desired width 
//maintaining the Aspect Ratio 
-(UIImage*)getResizedToWidth:(CGFloat)width 
{ 
    UIImage *resultImage = nil; 

    CGFloat ar = self.size.width/self.size.height; 
    CGFloat ht = width/ar; 

    CGSize newSize = CGSizeMake(width, ht); 

    UIGraphicsBeginImageContext(newSize); 
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 

    CGContextScaleCTM(ctx, 1, -1); 
    CGContextTranslateCTM(ctx, 0, -newSize.height); 

    CGRect imageRect = CGRectMake(0, 0, newSize.width, newSize.height); 

    CGContextDrawImage(ctx, imageRect, self.CGImage); 

    resultImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return resultImage; 
} 

//This method will resize the original image to desired height 
//maintaining the Aspect Ratio 
-(UIImage*)getResizedToHeight:(CGFloat)height 
{ 
    UIImage *resultImage = nil; 

    CGFloat ar = self.size.width/self.size.height; 
    CGFloat wd = height*ar; 

    CGSize newSize = CGSizeMake(wd, height); 

    UIGraphicsBeginImageContext(newSize); 
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 

    CGContextScaleCTM(ctx, 1, -1); 
    CGContextTranslateCTM(ctx, 0, -newSize.height); 

    CGRect imageRect = CGRectMake(0, 0, newSize.width, newSize.height); 

    CGContextDrawImage(ctx, imageRect, self.CGImage); 

    resultImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return resultImage; 
} 

//This method will take in the maxSizeLength and automatically 
// detect the maximum side in image and reduce it to given 
// maxSideLength maintaining the Aspect Ratio 
-(UIImage*)getResizedMaxSideToLength:(CGFloat)maxSideLength 
{ 
    UIImage *src = [UIImage imageWithCGImage:self.CGImage]; 

    if (src.size.width > maxSideLength) 
    { 
     src = [src getResizedToWidth:maxSideLength]; 
    } 
    else 
    if (src.size.height >= maxSideLength) 
    { 
     src = [src getResizedToHeight:maxSideLength]; 
    } 

    return src; 
} 

Когда вам нужно CGImage, то просто получить его путем доступа к свойству CGImage любого UIImage, как показано ниже

CGImage *myCGImage = myUIImage.CGImage; 
+0

Изображение результатов имеет разную ориентацию – Logioniz

+0

В этом случае вам нужно будет исправить ориентацию изображения перед выполнением операций изменения размера с помощью моего кода. Вот ссылка на то, как исправить ориентацию изображения http://stackoverflow.com/questions/5427656/ios-uiimagepickercontroller-result-image-orientation-after-upload/5427890#5427890 – CodenameLambda1

Смежные вопросы