【问题标题】:How to scale down an image in iOS, anti-aliased but not soft?如何在iOS中缩小图像,抗锯齿但不柔和?
【发布时间】:2012-02-25 09:29:59
【问题描述】:

我已经尝试了流行的 UIImage+Resize 类别,并且具有不同的插值设置。我尝试过通过 CG 方法和 CIFilters 进行缩放。但是,我永远无法缩小图像,使其焦点看起来既不柔和,也不充满锯齿状伪影。是否有其他解决方案或第三方库可以让我获得非常清晰的图像?

这在 iPhone 上必须是可能的,因为例如照片应用程序会显示清晰的图像,即使在捏合以缩小图像时也是如此。

【问题讨论】:

    标签: ios graphics ios5 core-graphics core-image


    【解决方案1】:

    当图像按比例缩小时,应用一些锐化通常是个好主意。

    问题是,iOS 上的 Core Image 还没有(还)实现锐化滤镜(CISharpenLuminanceCIUnsharpMask),所以你必须自己动手。或者唠叨 Apple,直到他们也在 iOS 上实现这些过滤器。

    不过,锐化亮度和反锐化蒙版是相当先进的滤镜,在之前的项目中,我发现即使是简单的 3x3 内核也会产生清晰可见且令人满意的结果。

    因此,如果您想在像素级别工作,您可以从图形上下文中获取图像数据,使用位掩码获取 R、G 和 B 值并像 1999 年一样对图形进行编码。它不过, 有点像重新发明轮子。

    也许周围有一些标准图形库也可以做到这一点(ImageMagick?)

    【讨论】:

      【解决方案2】:

      这是我为此编写的例程。有一点柔焦,尽管取决于您将原始图像缩放多远,这还不错。我正在缩放程序屏幕截图图像。

      - (UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize {
      
          UIGraphicsBeginImageContext(newSize);
          [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
          UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
          UIGraphicsEndImageContext();
      
          return newImage;
      }
      

      【讨论】:

        【解决方案3】:

        CGContextSetInterpolationQuality 是您正在寻找的。​​p>

        您应该尝试添加此类别 http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way/

        【讨论】:

          【解决方案4】:

          你说的是CG,但没有具体说明你的方法。

          使用绘图或位图上下文:

          CGContextSetInterpolationQuality(gtx, kCGInterpolationHigh);
          CGContextSetShouldAntialias(gtx, true); << default varies by context type
          CGContextDrawImage(gtx, rect, image);
          

          并确保您的视图及其图层不会再次调整图像大小。我在这方面取得了很好的成绩。其他视图可能会影响您的视图或上下文。如果它看起来不太好,请单独尝试以检查是否有东西扭曲了您的视图/图像。

          如果您正在绘制位图,则创建具有目标尺寸的位图,然后绘制到该位图。

          理想情况下,您将保持纵横比。

          另请注意,这可能会占用大量 CPU 资源 - 在总部重复绘制/缩放会花费大量时间,因此您可能希望创建一个调整大小的副本(使用 CGBitmapContext)。

          【讨论】:

          • 我一直在使用 UI 图形上下文并通过 drawInRect 或 drawAtPoint 进行绘图,以及这个。但是,您让我再次查看了我的代码,我意识到这实际上是由于我的代码的另一个方面。
          • 是的 - 明确图形上下文的设置是个好主意,因为它们和图形系统的其他方面可能会有很大差异。
          猜你喜欢
          • 2021-02-12
          • 2014-02-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-13
          • 1970-01-01
          相关资源
          最近更新 更多