1

アプリに Instagram を統合するために、612x612 の UIImage にフル画像を収めたいと考えています。しかし、私は側面のいずれかをカットしたくありません。612x612 の画像に完全に収まるように、横向きまたは縦向きの完全な画像の天候が必要です。正確な比率を維持しながら、希望のサイズ (612x612) にサイズ変更する方法を探している画像ビューにアスペクト フィットするように画像コンテンツ モードを設定できるのと同じです。

ユーザーはそこから uiimageview を介して既存の画像を選択します。同じ比率を維持しながら、選択した画像を 612 x 612 の画像にサイズ変更する必要があります。正方形の画像にサイズ変更したときの外観。

ここに画像の説明を入力

私のinstagram統合コード..

NSURL *instagramURL = [NSURL URLWithString:@"instagram://app"];
                        if([[UIApplication sharedApplication] canOpenURL:instagramURL]) //check for App is install or not
                        {

                            UIImage *viewImage;

                            switch (whichPhoto) {
                                case 1:
                                    viewImage = photoOneImageView.image;
                                    break;
                                case 2:
                                    viewImage = photoTwoImageView.image;
                                    break;
                                case 3:
                                    viewImage = photoThreeImageView.image;
                                    break;

                                default:
                                    break;
                            }
                            //here is where i resize my image
                            viewImage = [self scaleImage:viewImage toSize:CGSizeMake(612, 612)];

                            NSData *imageData = UIImagePNGRepresentation(viewImage); //convert image into .png format.
                            NSFileManager *fileManager = [NSFileManager defaultManager];//create instance of NSFileManager
                            NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); //create an array and store result of our search for the documents directory in it
                            NSString *documentsDirectory = [paths objectAtIndex:0]; //create NSString object, that holds our exact path to the documents directory
                            NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"insta.igo"]]; //add our image to the path
                            [fileManager createFileAtPath:fullPath contents:imageData attributes:nil]; //finally save the path (image)
                            NSLog(@"image saved");

                            CGRect rect = CGRectMake(0 ,0 , 0, 0);
                            UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, self.view.opaque, 0.0);
                            [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
                            UIGraphicsEndImageContext();
                            NSString *fileNameToSave = [NSString stringWithFormat:@"Documents/insta.igo"];
                            NSString  *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:fileNameToSave];
                            NSLog(@"jpg path %@",jpgPath);
                            NSString *newJpgPath = [NSString stringWithFormat:@"file://%@",jpgPath];
                            NSLog(@"with File path %@",newJpgPath);
                            NSURL *igImageHookFile = [[NSURL alloc]initFileURLWithPath:newJpgPath];
                            NSLog(@"url Path %@",igImageHookFile);

                            self.documentController.UTI = @"com.instagram.exclusivegram";
                            self.documentController = [self setupControllerWithURL:igImageHookFile usingDelegate:self];
                            self.documentController=[UIDocumentInteractionController interactionControllerWithURL:igImageHookFile];
                            NSString *caption = @"My caption"; //settext as Default Caption
                            self.documentController.annotation=[NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@"%@",caption],@"InstagramCaption", nil];
                            [self.documentController presentOpenInMenuFromRect:rect inView: self.view animated:YES];
                        }
                        else
                        {
                            NSLog (@"Instagram not found");
                        }
                    }

しかし、代わりに私はこれを得る

ここに画像の説明を入力

これは、ほぼ横向きに表示された画像のサイズ変更された作品に使用する方法ですが、縦向きではありません

- (UIImage*) scaleImage:(UIImage*)image toSize:(CGSize)newSize {
    CGSize scaledSize = newSize;
    float scaleFactor = 1.0;
    if( image.size.width > image.size.height ) {
        scaleFactor = image.size.width / image.size.height;
        scaledSize.width = newSize.width;
        scaledSize.height = newSize.height / scaleFactor;
    }
    else {
        scaleFactor = image.size.height / image.size.width;
        scaledSize.height = newSize.height;
        scaledSize.width = newSize.width / scaleFactor;
    }

    UIGraphicsBeginImageContextWithOptions( scaledSize, NO, 0.0 );
    CGRect scaledImageRect = CGRectMake( 0.0, 0.0, scaledSize.width, scaledSize.height );
    [image drawInRect:scaledImageRect];
    UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return scaledImage;
}
4

2 に答える 2

0

コンテンツモードをアスペクトフィットに設定して画像ビューを作成し、その画像ビューのスクリーンショットを作成するだけです。他の誰かがよりエレガントなソリューションを持っている場合はお知らせください

                    UIImageView *imageview = [[UIImageView alloc] init];
                    imageview.contentMode = UIViewContentModeScaleAspectFit;
                    imageview.frame = CGRectMake(0, 0, 612, 612);
                    imageview.clipsToBounds = NO;
                    imageview.image = viewImage;

                   CGSize imageSize = CGSizeMake(imageview.bounds.size.width, imageview.bounds.size.height);
                    UIGraphicsBeginImageContext(imageSize);
                    [imageview.layer renderInContext:UIGraphicsGetCurrentContext()];
                    viewImage = UIGraphicsGetImageFromCurrentImageContext();
                    UIGraphicsEndImageContext();
于 2015-02-19T15:29:28.403 に答える