【问题标题】:iOS: how to scale up image nicely?iOS:如何很好地放大图像?
【发布时间】:2017-01-15 09:51:18
【问题描述】:

我无法以一种不错的方式放大图像。我在 UIImageView 中显示图像。但是在从服务器下载图像时,我想显示图像的模糊版本。服务器很快给了我一个小版本的图像,看起来像这样:

放大后是这样的:

我希望能够像这样绘制它(当我放大图像时 Chrome 是这样绘制它的):

但是当我将图像放入 UIImageView 并将 imageview.layer.magnificationFilter 设置为 kCAFilterLinear 或 kCAFilterTrilinear 时,我得到了这个:

...这是丑陋的 - 注意光和暗的硬带。

我尝试过将 CIFilter 与 CILanczosScaleTransform 一起使用,这看起来很有希望,但我得到了一个丑陋的边框效果:

嗯 - 有什么建议吗?有人做得很好吗?我可以永远尝试过滤器,我想看看是否有人破解了这个......

编辑:我尝试了 bbarnhart 的建议。我明白了 - 更好,但模糊半径太大或其他什么:

编辑 2:@bbarnhart,我现在可以更接近了!

【问题讨论】:

  • 这个问题似乎完全取决于你的个人审美,什么是可以接受的。这不是编程问题,无论如何没有人能读懂你的想法。只有才能知道你想要什么并决定给定的实现是否能提供好的渲染,所以你只需要不断尝试。
  • @matt:不正确。我陈述了我想要实现的目标:第二张图像,以及我尝试过的内容,并要求提供编程解决方案来实现目标。这完全是一个编程问题。
  • 但是,实际上,您只是在问“Chrome 是如何实现这种效果的”?但是我们谁也不知道那个,而且iOS不是Chrome。
  • 我在操场上使用了第一个非常块状的图像,而不是来自 magnificationFilter 的图像。它看起来非常接近您想要实现的目标。
  • @matt: 也不正确:我不在乎 chrome 是如何做到的,我只关心如何在 iOS 中实现它。

标签: ios uiimageview cifilter


【解决方案1】:

在你的 UIImageView 上使用模糊效果可能会给你一些更接近你想要的东西。

let blurView = UIVisualEffectView(effect: UIBlurEffect(style: .Light))    
blurView.frame = yourImageView.bounds
yourImageView.addSubview(blurView)

也可以查看bluuur

更新以包含游乐场:

import UIKit
import XCPlayground

let image = UIImage(named: "pixels")
let view = UIView(frame: CGRect(x: 0, y: 0, width: 346, height: 431))
let imageView = UIImageView(image: image)

let blurView = UIVisualEffectView(effect: UIBlurEffect(style: .Light))
blurView.frame = imageView.bounds
imageView.addSubview(blurView)

view.addSubview(imageView)
XCPlaygroundPage.currentPage.liveView = view

【讨论】:

  • 谢谢,这很有趣,而且看起来确实更好,但并不理想(见上面的结果)
猜你喜欢
  • 2010-12-30
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 2016-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多