0

我正在开发一个 iPhone 应用程序,该应用程序的一个功能是将 iPhone 屏幕的图像发布到用户的 Facebook 墙上,但我无法正确调整和缩放图像的大小。当应用程序发布到 Twitter 时没有问题,但当它发布到 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];

关于如何解决这个问题的任何想法?

在此先感谢您的帮助。

4

3 回答 3

1

你用 UIImage 的方法试过了吗

 UIImage *scaledImage = 
            [UIImage imageWithCGImage:[originalImage CGImage] 
                                scale:2.0 
                          orientation:UIImageOrientationUp];
于 2012-12-16T04:23:13.753 回答
0

好吧,我更改了UIGraphicsBeginImageContextWithOptions方法中的最后一个数字scaleImage(从 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;
}
于 2012-12-16T14:59:28.703 回答
0

您是否有机会尝试使用:UIGraphicsBeginImageContext或 1.0 in 的比例因子UIGraphicsBeginImageContextWithOptions

在您的原始版本中,它使用的是您设备的主屏幕比例因子。因此,如果您在视网膜显示器上运行,而不是 350,您得到的图像实际上是 700 高。

于 2012-12-19T23:46:58.430 回答