我正在开发一款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];
关于我如何解决这个问题的任何想法?
提前感谢您的帮助。
答案 0 :(得分:1)
您是否尝试过UIImage的方法
UIImage *scaledImage =
[UIImage imageWithCGImage:[originalImage CGImage]
scale:2.0
orientation:UIImageOrientationUp];
答案 1 :(得分: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;
}
答案 2 :(得分:0)
您是否有机会尝试使用UIGraphicsBeginImageContext
或UIGraphicsBeginImageContextWithOptions
中的比例因子1.0?
在您的原始版本中,它使用了您设备的主屏幕缩放系数。因此,如果你在视网膜显示器上运行,而不是350,你得到的图像实际上是700高。