1

在我的 iOS 应用程序中,我需要用户能够发送带有 GIF 图像附件的电子邮件。我通过使用 MFMailComposeViewController 实现了这一点。如果 GIF 图像的文件大小很小,则一切正常。但是,如果图像尺寸很大,iOS 会要求减小图像尺寸。如果用户接受减小图像大小,GIF 的动画就消失了。实际上,这与此处提出的问题相同:Preventing MFMailComposeViewController from scaling animated GIFs

我的理解是,没有办法避免 iOS 要求减小尺寸。因此,我正在考虑的解决方案如下:我会在附加之前预先压缩并生成一个减小文件大小的新 gif,以便它始终足够小。

所以我的问题是:是否有保证不会导致 iOS 要求减小图像大小的图像文件大小?例如,是否有类似“如果附加的图像文件小于 X KB,邮件将永远不会要求减小图像大小”之类的东西,X 是什么?

4

1 回答 1

1

如果您想缩小图像大小,我有一个阈值问题的答案和一种缩小图像并可靠地避免 Apple 查询的方法。

一些背景:

在我的应用程序中,我为用户提供了在通过电子邮件发送之前自动将其图像缩小到 1024x768 的选项,以避免 Apple 的“你想缩小图像吗?” 询问。

很长一段时间,我认为这个除垢量就足够了。但我发现,如果他们的图像中有足够的细节,那么即使在 1024x768 下,它仍然可以触发 Apple 的查询。

所以,下面的代码是我处理这个问题的方法。请注意,如果 getMinImgSizFlag 为 TRUE,我已经在其他地方将图像缩放为 1024x768。自动

//...convert the UIImage into NSData, as the email controller requires, using
//   a default JPG compression value of 90%.

float jpgCompression = 0.9f;

imageAsNSData = UIImageJPEGRepresentation( [self camImage], jpgCompression );

if ( [gDB getMinImgSizFlag] == TRUE )
    {
    //...if we are here, the user has opted to pre emptively scale their
    //   image down to 1024x768 to avoid Apple's 'scale the image down?'
    //   query.
    //
    //   if so, then we will do a bit more testing because even with
    //   the image scaled down, if it has a lot of fine detail, it may
    //   still exceed a critical size threashold and trigger the query.
    //
    //   it's been empirically determined that the critical size threashold
    //   falls between 391K and 394K bytes.
    //
    //   if we determine that the compressed image, at the default JPG
    //   compression, is still larger than the critical size threashold,
    //   then we will begin looping and increasing the JPG compression
    //   until the image size drops below 380K.
    //
    //   the aproximately 10K between our limit, 380K, and Apple's
    //   critical size threashold allows for the possibility that Apple
    //   may be including the contribution of the E-Mail's text size into
    //   its threashold calculations.

    while ( [imageAsNSData length] > 380000 )
       {
       jpgCompression -= 0.05f;
       imageAsNSData = UIImageJPEGRepresentation( [self camImage], jpgCompression );
       }
    }

而已。我已经测试了这段代码,它可靠地让我避免了苹果的你想在通过电子邮件发送查询之前缩小你的图像。

于 2014-02-09T05:06:39.827 回答