问题恢复:
我用相机拍了一张照片,或者从图书馆里选了一张照片,然后添加了一些UITextField s 到它(在 UIImageView 与所选图片旁边),创建一个 UIImage这一切,然后我想分享这个,特别是在 Facebook 和 Twitter 上。我能够做到这一点,但是图像质量明显下降。如何调整代码以使质量保持领先?
带有代码和图片的详细描述
首先,我在相机和图书馆之间做出了选择。然后,在我以某种方式选择图像后,我用
获取它 - (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
方法,我将图像分配给我的全局 UIImage *chosenImage ,之后我会用它。
然后,我添加 chosenImage到 UIImageView ,作为 sibling ,我添加了一个 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 image on my server
图片上传至推特:Twitter image on my server
图片来自文档:Picture from the documents on my server (there is a huge difference!)
那么,有人知道我应该为代码中的图像选择什么设置以使质量(即使在 .jpg 压缩之后,似乎到处都是,甚至在这里)至少以某种方式更好?在我看来,它只发生在带有文字的纯色背景上(当我尝试上传没有背景的图像时,它看起来更好,但必须有一种方法可以使它在有背景的情况下看起来更好)
谢谢!
编辑 事实证明,问题可能不在于共享内容,而在于 jpeg 压缩本身。正如答案中所述:Facebook: Ways to preserve image quality of uploaded images? ,
"JPEG is not suitable for images with text, large blocks of color, or simple shapes, because crisp lines will blur and colors can shift. http://graphicssoft.about.com/od/graphicformats/f/summary.htm "
所以我想没有解决方案,因为 Facebook、Twitter 甚至 stack.imgur 使用 jpeg 压缩,只要有“带有文本、大块颜色或简单形状的图像”,它就会来得很糟糕。太糟糕了。
最佳答案
JPEG 压缩最适合连续色调图像,例如照片。它不适用于纯色区域和清晰的传统区域,例如文本。 Png/Gif 效果更好。有一些格式可以更好地处理这个问题,例如 Facebook 考虑使用但放弃的 Google WebP。
您最好坚持使用 JPEG 并使用 JPEG 编码设置,但您可以做一些事情。使用内置的 iOS 字体或使用您自己的自定义字体调整您的字体。由于纯色的急剧过渡会导致问题,因此请避免使用 Serif 字体。字体越大越好。 IOS 支持自定义字体,因此请尝试使用不同的开源字体并找到您可以接受的最大尺寸的字体。关注这篇文章
http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/ .
另一个有帮助的是抗锯齿。这是边缘颜色模糊的地方,使文本看起来更具可读性(过度简化)。文本不会抗锯齿,你不能轻易强制抗锯齿,但你可以伪造它。在具有透明度的单独图像中创建更大尺寸(2 到 3 倍)的文本,并在将其添加到图片之前按比例缩小。图像插值会使图像模糊,给你一个可怜的抗锯齿。
关于ios - 社交共享图像的图像质量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19196164/
我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
我有带有Logo图像的公司模型has_attached_file:logo我用他们的Logo创建了许多公司。现在,我需要添加新样式has_attached_file:logo,:styles=>{:small=>"30x15>",:medium=>"155x85>"}我是否应该重新上传所有旧数据以重新生成新样式?我不这么认为……或者有什么rake任务可以重新生成样式吗? 最佳答案 参见Thumbnail-Generation.如果rake任务不适合你,你应该能够在控制台中使用一个片段来调用重新处理!关于相关公司
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
我正在尝试使用Ruby2.0.0和Rails4.0.0提供的API从imgur中提取图像。我已尝试按照Ruby2.0.0文档中列出的各种方式构建http请求,但均无济于事。代码如下:require'net/http'require'net/https'defimgurheaders={"Authorization"=>"Client-ID"+my_client_id}path="/3/gallery/image/#{img_id}.json"uri=URI("https://api.imgur.com"+path)request,data=Net::HTTP::Get.new(path
2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p
有这样的事吗?我想在Ruby程序中使用它。 最佳答案 试试这个http://csl.sublevel3.org/jp2a/此外,Imagemagick可能还有一些东西 关于ruby-是否有将图像文件转换为ASCII艺术的命令行程序或库?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6510445/
我正在使用Dragonfly在Rails3.1应用程序上处理图像。我正在努力通过url将图像分配给模型。我有一个很好的表格:{:multipart=>true}do|f|%>RemovePicture?Dragonfly的文档指出:Dragonfly提供了一个直接从url分配的访问器:@album.cover_image_url='http://some.url/file.jpg'但是当我在控制台中尝试时:=>#ruby-1.9.2-p290>picture.image_url="http://i.imgur.com/QQiMz.jpg"=>"http://i.imgur.com/QQ
print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上