2012-12-16 78 views
0

我正在开发iPhone应用程序的一项功能,它将iPhone屏幕的图像张贴到用户的Facebook墙上,但我无法正确确定图像的大小和缩放比例。当应用发布到Twitter时没有问题,但是当它发布到Facebook时,我最终只能获得更大图像的一小部分。我想要的只是屏幕图像的缩小版。如何缩放屏幕图像张贴在Facebook墙上?

下面是我使用(或试图使用)的代码:

这将创建图像。

-(UIImage *)createImage 
{ 
CGRect newRect = CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height-44); 
UIGraphicsBeginImageContext(newRect.size); //([self.view frame].size]) 
[[self.view layer] renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *myImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
UIGraphicsBeginImageContext([self.view bounds].size); 
[myImage drawInRect:CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height-44)]; 
myImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
return myImage; 
} 

而这目前无法缩放:

- (UIImage*) scaleImage:(UIImage*)image 
{ 
int widthToUse = [[UIScreen mainScreen] bounds].size.width; 
int heightToUse = [[UIScreen mainScreen] bounds].size.height; 
CGSize scaledSize; 
scaledSize.height = 350; //I used 350 because it seemed to be the maximum size of a Facebook wall photo. 
scaledSize.width = ((350*widthToUse)/heightToUse); 
UIGraphicsBeginImageContextWithOptions(scaledSize, NO, 0.0); 
CGRect scaledImageRect = CGRectMake(0.0, 0.0, scaledSize.width, scaledSize.height); 
[image drawInRect:scaledImageRect]; 
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
return newImage; 
} 

这里是我如何使用它:

[controller setInitialText:msgText]; 
    [controller addURL:[NSURL URLWithString:@"http://www.myURL.com"]]; 
    UIImage *img = [self createImage]; 
    UIImage *pic; 
    if (self.serviceType==SLServiceTypeFacebook) 
    { 
     pic = [self scaleImage:img]; 
    } 
    else if (self.serviceType==SLServiceTypeTwitter) 
    { 
     pic = img; 
    } 
    [controller addImage:pic]; 
    [self presentViewController:controller animated:YES completion:Nil]; 

我如何能解决这个问题有什么想法?

在此先感谢您的帮助。

回答

0

好试过,我改变了过去数UIGraphicsBeginImageContextWithOptionsscaleImage方法(从0.0到0.975),似乎已经完成了帽子戏法。奇怪的是,虽然0.975很好,但0.98(和更高的数字)复制了最初的问题。

- (UIImage*) scaleImage:(UIImage*)image 
{ 
int widthToUse = [[UIScreen mainScreen] bounds].size.width; 
int heightToUse = [[UIScreen mainScreen] bounds].size.height; 
CGSize scaledSize; 
scaledSize.height = 350; 
scaledSize.width = ((350*widthToUse)/heightToUse); 
UIGraphicsBeginImageContextWithOptions(scaledSize, NO, 0.975); 
CGRect scaledImageRect = CGRectMake(0.0, 0.0, scaledSize.width, scaledSize.height); 
[image drawInRect:scaledImageRect]; 
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
return newImage; 
} 
1

有你的UIImage的方法

UIImage *scaledImage = 
      [UIImage imageWithCGImage:[originalImage CGImage] 
           scale:2.0 
          orientation:UIImageOrientationUp]; 
+0

嗯。我用0.25,0.75和2.0来试这个,而且没有一个看起来有什么区别。 :( –

0

你有没有任何机会尝试使用:UIGraphicsBeginImageContext或1.0 UIGraphicsBeginImageContextWithOptions比例因子?

在您的原始版本中,它使用了您设备的主屏幕比例因子。所以如果你在视网膜显示器上运行,而不是350,你会得到一个高度为700的图像。