Проблема Резюме:Изображения социально общим образом
Я беру фотографию с камерой или выбрать один из библиотеки, а затем добавить некоторые UITextField
S к нему (рядом UIImageView
с выбранным изображением), создать UIImage
, а затем я хочу поделиться этим, особенно с Facebook и Twitter. Я могу это сделать, однако качество изображения значительно падает. Как настроить код так, чтобы качество оставалось сверху?
Длинное описание с кодом и изображениями
Прежде всего, я выбрал между камерой и библиотекой. Затем, после того, как я выбираю изображение в какой-то мере, я его с
- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
метод, где я назначить изображение моей глобальной 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
и когда я смотрю там, это выглядит довольно хорошо! Что действительно заставляет меня задаться вопросом, почему я не использую конверт с напечатанной картинкой (тот, который сохранен в документах, конечно!), И не отправляйте его в Menlo Park, CA и South of Market, CA, а не пытаетесь решить эту нелепую проблему.
Теперь пришли фотографии!
umh .. Так что после того, как я попытался загрузить изображения здесь, загружающая вещь превратила изображение .png в ужасное качество! Aagh, я думал, что stackOverflow со мной!
В любом случае, вот фотографии (загруженные здесь), а также соответствующие ссылки, которые показаны реальные изображения, на моем сервере (я надеюсь, что не уничтожит их, а)
Изображение загружено на Facebook: Facebook image on my server
Изображение загружено в Twitter: Twitter image on my server
Картина из документов: Picture from the documents on my server (there is a huge difference!)
Итак, кто-нибудь знает, какие настройки я выбрал для изображения в коде, чтобы сделать качество (даже после .jpg компрессии, что делается во всем мире, кажется, даже здесь), по крайней мере как-то лучше? И, как мне кажется, это происходит только на сплошном фоне с текстом на нем (когда я пытался загрузить изображение без фона, он выглядел лучше, но должен быть способ, как заставить его выглядеть лучше с фоном, а также)
Спасибо!
EDIT Как выясняется, проблема может быть не в том, что касается обмена, а с само сжатием jpeg. Как говорится здесь, в ответе: Facebook: Ways to preserve image quality of uploaded images?,
«JPEG не подходит для изображений с текстом, крупными блоками цвета, или простыми формами, потому что четкие линии размоют и цвет может смещаться http://graphicssoft.about.com/od/graphicformats/f/summary.htm.»
Так что, я думаю, что нет решения, так как Facebook, Twitter и даже stack.imgur используют сжатие jpeg, и пока будет «изображение с текстом, большие блоки цвета или простые фигуры», это будет плохо. Очень жаль.
Вы пытались использовать 'UIImageJPEGRepresentation (UIImage * image, CGFloat compressionQuality);'? Это позволяет вам изменять качество изображения, изменяя коэффициент сжатия. –
Я действительно пытался это сделать, и это было бесполезно.Кроме того, можно было бы предположить, что использование представления PNG должно создать изображение с высоким качеством, в значительной степени такое же, как JPEG-представление с параметром compressionQuality, равным стопроцентному, но оно также не удалось. – Gyfis
Аналогичный вопрос: http://stackoverflow.com/q/10966089/448734 – Bryan