1

我正在生成一个 UIImage :

//scale UIView size to match underlying UIImage size
float scaleFactor = 10.0

UIGraphicsBeginImageContextWithOptions(self.bounds.size, self.opaque, scaleFactor);

[self.layer renderInContext:UIGraphicsGetCurrentContext()];

UIImage* image = UIGraphicsGetImageFromCurrentImageContext();

UIImage 的大小为 3200x2400,这正是我想要的。但是,当我转换为 PNG 格式以作为电子邮件附件发送时:

NSData* data = UIImagePNGRepresentation(image);

MFMailComposeViewController* controller;
...
[controller addAttachmentData:data mimeType:mimeType fileName:.fileName];

我最终得到的图像是 720 ppi,因此约为 12.8mb。这太大了。

我不知道 720 ppi 来自哪里,UIImage 是从 72 ppi 的图像生成的。它必须与以下内容有关:

UIGraphicsBeginImageContextWithOptions(self.bounds.size, self.opaque,scaleFactor);

我需要根据底层 UIImage(比 UIView 的边界大得多)从 UIView 创建 UIImage,但我需要维护原始 ppi。720 ppi 对于电子邮件附件来说太不切实际了。

有什么想法吗?

4

3 回答 3

3

scaleFactor的在. too high_ 然后截图。resultslarge image dataDecrease scaleFactor

基本上应该是

float scaleFactor = 1.0;

转换成PNG,如:

 NSData *imageData = UIImagePNGRepresentation(imagehere);

将 imageData 附加到邮件。

编辑:像这样调整图像大小:

 UIGraphicsBeginImageContextWithOptions(self.bounds.size, self.opaque, 1.0);
 [yourimageview.image drawInRect:CGRectMake(0,0,self.bounds.size)];
 UIImage* image = UIGraphicsGetImageFromCurrentImageContext();
 UIGraphicsEndImageContext();
于 2012-11-21T09:41:39.467 回答
1

根据 eagle.dan.1349 的建议,我尝试了以下方法:

-(UIImage*)convertViewToImage
{
    UIImage* retVal = nil;

    //create the graphics context
    CGSize imageSize = targetImage.size;
    CGSize viewSize = self.bounds.size;

    //CGSize cvtSize = CGSizeMake(imageSize.width/viewSize.width,            imageSize.height/viewSize.height);
    float scale = imageSize.width/viewSize.width;

    UIGraphicsBeginImageContextWithOptions(self.bounds.size, self.opaque, scale);

    //write the contents of this view into the context
    [self.layer renderInContext:UIGraphicsGetCurrentContext()];

    //get the image
    retVal = UIGraphicsGetImageFromCurrentImageContext();

    //close the graphics context
    UIGraphicsEndImageContext();

    NSData* data = UIImageJPEGRepresentation(retVal, 0.0);
    [retVal release];
    retVal = [UIImage imageWithData:data];

    return retVal;
}

*稍后我执行:

NSData* data = UIImagePNGRepresentation(image);

然而,正如我所提到的,这仍然会产生 5.8 MB 的图像,所以我怀疑在 300 ppi 附近的某个地方。

我需要一个 UIImage,它是从 UIView 创建的,具有我需要的分辨率和大小(72 ppi,3200X2400)。必须有办法做到这一点。

于 2012-11-21T14:30:58.883 回答
0

首先,我想知道您的设备如何不会因这些高清图像而哭泣。当我从事与图像相关的项目时,PNG 的高分辨率导致社交网络共享和电子邮件发送出现许多问题,因此我们转向了 JPEG。此外,一般不建议以 PNG 格式在 web 上发送图像,最好将其设为 JPEG 并适当压缩。但是,如果您需要使用 PNG,您可以使用这种技巧:首先将其转换为 JPEG 数据,使用此数据初始化您的图像,然后再将其转换为 PNG。

编辑:此外,尝试仅设置您需要 320X240 的上下文大小,并且缩放不是 10,而是设置为 0,以便系统确定所需的比例。它可能会有所帮助。然后再次缩放生成的 UIImage 。

于 2012-11-21T09:51:38.133 回答