0

iPhone 画面の画像をユーザーの Facebook ウォールに投稿する機能の 1 つである iPhone アプリに取り組んでいますが、画像のサイズ変更とスケーリングが適切に行われません。アプリが 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

Have you tried with UIImage's method

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

たまたま使用してみましたか:UIGraphicsBeginImageContextまたは1.0のスケールファクターUIGraphicsBeginImageContextWithOptions

元のバージョンでは、デバイスのメイン画面のスケール係数を使用していました。したがって、Retinaディスプレイで実行している場合、350ではなく実際に700の高さの画像が得られます。

于 2012-12-19T23:46:58.430 に答える
0

メソッドの最後の数値を (0.0 から 0.975 に) 変更したところ、うまくいったUIGraphicsBeginImageContextWithOptionsようscaleImageです。奇妙なことに、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 に答える