問題の再開:
カメラで写真を撮るか、ライブラリから 1 つを選択し、 UITextField
(選択した写真の隣にUIImageView
) をいくつか追加して、そのすべての 1 つを作成UIImage
し、特に Facebook や Twitter で共有したいと考えています。これを行うことはできますが、画像の品質が大幅に低下します。品質を維持するためにコードを調整するにはどうすればよいですか?
コードと画像を含む長い説明
まず、カメラとライブラリのどちらかを選択しました。次に、何らかの方法で画像を選択した後、次のように取得します
- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
メソッドで、イメージを global に割り当て、UIImage *chosenImage
後でそれを使用します。
次に、 を に追加しchosenImage
、UIImageView
兄弟として を次のUITextField
ように追加します。
UIImageView *chosenImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, actualHeight - 50)];
[chosenImageView setBackgroundColor:[UIColor clearColor]];
[chosenImageView setContentMode:UIViewContentModeScaleAspectFill];
[chosenImageView setClipsToBounds:YES];
[chosenImageView setImage:chosenImage];
UITextField *textFieldName = [[UITextField alloc] initWithFrame:CGRectMake(15, 15, 290, 30)];
[textFieldName setBackgroundColor:[UIColor blueColor]];
[textFieldName setDelegate:self];
[textFieldName setTag:-1];
[textFieldName setText:textName];
[textFieldName sizeToFit];
[textFieldName setContentScaleFactor:2.0];
[pageView addSubview:textFieldName];
[pageView addSubview:chosenImageView];
この後、「これを共有してください!」があります。ボタンをクリックすると、画像を Facebook や Twitter で共有できるようになります。次に、UIImage *imageToShare
このメソッドを使用して を に変換UIView
しUIImage
ます (これは問題なく動作しているようです)。
- (UIImage *)changeViewToImage:(UIView *)view
{
UIGraphicsBeginImageContextWithOptions([view bounds].size, NO, 0);
[[view layer] renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
共有された写真の品質は Facebook と Twitter で同じようで、この場合は同じということは非常に悪いことを意味します。
Twitterの共有に使用するコード:
SLComposeViewController *tweetSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
[tweetSheet setInitialText:@""];
[tweetSheet addImage:imageToShare];
[tweetSheet setCompletionHandler:^(SLComposeViewControllerResult result) {
[self dismissViewControllerAnimated:YES completion:nil];
}];
[self presentViewController:tweetSheet animated:YES completion:nil];
そして、私が Facebook 共有に使用するコード:
NSDictionary *params = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:UIImagePNGRepresentation(imageToShare), imageDescription, nil] forKeys:[NSArray arrayWithObjects:@"source", @"message", nil]];
[FBRequestConnection startWithGraphPath:@"me/photos" parameters:params HTTPMethod:@"POST" completionHandler:^(FBRequestConnection *connection, id result, NSError *error)
{
[[[UIAlertView alloc] initWithTitle:@"Success!" message:@"Your photo was successfully posted to your Facebook Wall" delegate:nil cancelButtonTitle:@"Ok :)" otherButtonTitles:nil, nil] show];
[self returnFromShareView];
}];
imageToShare
ただし、ドキュメント
に保存するためのコードをいくつか追加しました。
NSData *data = UIImagePNGRepresentation(imageToShare);
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0]; //Get the docs directory
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"currentImage.png"]; //Add the file name
[data writeToFile:filePath atomically:YES]; //Write the file
で、上から見るとかなり綺麗!なぜ私は印刷された写真付きの封筒を使用しないのか (もちろん、ドキュメントに保存されているものです!)、カリフォルニア州メンローパークとカリフォルニア州サウス マーケットに送ろうとしないのはなぜなのか、本当に不思議に思います。このばかげた問題を解決します。
写真をどうぞ!
うーん..ここに画像をアップロードしようとした後、アップロードすると.png画像もひどい品質になりました!!! ああ、私はstackOverflowが私と一緒にいると思った!
とにかく、ここに写真(ここにアップロード)と、実際の画像を示す対応するリンクが私のサーバーにあります(これも破壊しないことを願っています)
Facebookにアップロードされた画像:私のサーバー上のFacebook画像
Twitter にアップロードされた画像:サーバー上の Twitter 画像
ドキュメントからの画像:サーバー上のドキュメントからの画像 (大きな違いがあります!)
それで、コード内の画像の品質を高めるためにどの設定を選択すればよいか知っている人はいますか (.jpg 圧縮が行われた後でも)どこでも、ここでも)少なくともどういうわけか良いですか?そして、私には思われるように、それはテキストのある無地の背景でのみ発生します(背景なしで画像をアップロードしようとすると、見栄えが良くなりましたが、背景でも見栄えを良くする方法があるはずです)
ありがとう!
編集 結局のところ 、問題は共有のものではなく、jpeg 圧縮自体にある可能性があります。回答でここに記載されているように: Facebook: アップロードされた画像の画質を維持する方法は? 、
「鮮明な線がぼやけたり、色がずれたりする可能性があるため、JPEG はテキスト、大きな色のブロック、または単純な形状を含む画像には適していません。http://graphicssoft.about.com/od/graphicformats/f/summary.htm」
Facebook、Twitter、さらには stack.imgur でさえ jpeg 圧縮を使用しているため、「テキスト付きの画像、大きな色のブロック、または単純な形状」がある限り、解決策はないと思います。残念な。