我的应用程序中有一个可重复的模式。
以下是应用中显示的图片:
这是转换为PDF后显示的相同图像:
正如您所看到的,图像颜色从灰色/绿色变为粉红色 PDF将直接加载到准备发送的电子邮件中。
我不确定这是否与图像本身加载到PDF中有关,或者与PDF格式过程有关。无论哪种方式,我都附上了以下PDF流程的代码。
这是我的PDF生成代码:
- (NSData *)createPDFForView:(UIView *)view{
NSMutableData *pdfData = [NSMutableData data];
UIGraphicsBeginPDFContextToData(pdfData, CGRectMake(0, 0, 792, 600), nil);
UIGraphicsBeginPDFPage();
CGContextRef pdfContext = UIGraphicsGetCurrentContext();
[view setFrame:CGRectMake(0, 0, 792, 600)];
[view.layer renderInContext:pdfContext];
UIGraphicsEndPDFContext();
return pdfData;
}
在PDF过程中,我通过调整帧将其转换为50%的大小,图像本身不会被修改,只包含图像的视图;图像在框架内自动显示。
是否可以采取任何措施阻止颜色变化发生?
答案 0 :(得分:2)
PDF规范仅支持JPEG,JPEG2000,TIFF& JBIG2(以及其他一些无用的人都无关紧要。)长话短说,无论你用什么程序将文档转换成PDF,都会被迫将图像转换为兼容格式,而传统上JPEG则选择在这些情况下使用。
所以原因是因为图像被修改为JPEG而没有透明度,并使用PNG到JPEG转换器,不考虑保留图像的外观。如果图像有任何颜色配置文件,那么它们也可能被剥离。
如果在将文档转换为PDF之前将图像转换为JPEG,您将获得更好的结果并更好地控制所发生的事情。通过这种方式,程序可以保持您的图像不变,因此您可以确切地知道您将获得的图像。这也是您指定图像颜色配置文件的唯一机会。
如果你可以管理它,JPEG2000优于JPEG,特别是如果你正在寻找无损图像。
可以在PDF上实现透明度,但无论使用何种图像格式,都可以通过图像对象上的滤镜实现透明度。然而,这比你正在做的更先进,可能不值得花时间。
答案 1 :(得分:1)
我已经解决了这个错误,但没有想出它的“原因”。
基本上,灰色/蓝色是透明的PNG 我给了它一个白色背景并重新保存图像,它似乎工作正常。
我仍然会奖励任何可以帮助我解决'为什么'的人。
答案 2 :(得分:0)
如果没有确切的颜色(而且我没有在这台计算机上使用Photoshop的副本......),这有点难以辨别,但它似乎是两件事之一:
答案 3 :(得分:0)
我猜测的原因是内部图像被转换为JPEG。由于JPEG不支持透明度,因此将背景颜色添加到透明像素中。添加的像素通常为灰色或黑色,但可能与实现有关,也可能与PNG中的“背景颜色”数据字段有关。
潜在的问题可能是PDF标准并不真正支持嵌入式PNG。当它渲染它们时,通常是因为创建者软件将数据转换为未压缩的rastor字节,但这只会使文件膨胀。
可能比这更复杂,根据this adobe forum thread,问题实际上是Postscript,所以如果UIView正在进行postcript-> pdf转换,那也会引起这种情况。