在 Photoshop 等 UIImageViews 上设置混合模式

Posted

技术标签:

【中文标题】在 Photoshop 等 UIImageViews 上设置混合模式【英文标题】:Set blendmodes on UIImageViews like Photoshop 【发布时间】:2014-04-29 08:31:26 【问题描述】:

我一直在尝试将混合模式应用于我的 UIImageViews 以复制 PSD 模型文件(抱歉无法提供)。 PSD 文件有 3 层,60% 正常混合的基色,55% 多重混合的图像层和 35% 叠加的渐变层。

我已经在互联网上尝试了几个教程,但仍然无法获得完全相同的颜色/图像。

我注意到的一件事是我的 iPhone 的颜色与我的 Mac 屏幕的颜色不同。

我找到了 Quartz 2D 的文档,我认为这是正确的方法,但我找不到任何关于使用图像混合模式的示例/教程。 https://developer.apple.com/library/mac/documentation/graphicsimaging/conceptual/drawingwithquartz2d/dq_images/dq_images.html#//apple_ref/doc/uid/TP30001066-CH212-CJBIJEFG

谁能提供一个与文档中的教程相同的好教程,这样如果没有人为我的问题提供直接的答案,我至少可以尝试混淆。

【问题讨论】:

【参考方案1】:

这个问题是很久以前提出的,但是如果有人正在寻找相同的答案,您可以在视图的支持层上使用 compositingFilter 来获得您想要的:

overlayView.layer.compositingFilter = "multiplyBlendMode"

由@SeanA 建议,此处:https://***.com/a/46676507/1147286

过滤器 过滤器的完整列表是here 或者您可以使用

打印出合成过滤器类型
print("Filters:\n",CIFilter.filterNames(inCategory: kCICategoryCompositeOperation))

【讨论】:

【参考方案2】:

您不想为此使用 UIImageView,因为它并不真正支持混合模式。

相反,要走的路是创建一个 UIView 子类(其行为就像 UIImageView)。所以创建一个 UIView 子类,称为 BlendedImageView 之类的东西。它应该有一个 image 属性,然后在 drawRect: 方法中你可以这样做:

- (void)drawRect:(CGRect)rect

    //
    // Here you need to calculate a rect based on self.contentMode to replicate UIImageView-behaviour.
    // For example, for UIViewContentModeCenter, you want a rect that goes outside 'rect' and centers with it.
    //
    CGRect actualRect = // ...
    [self.image drawInRect:actualRect blendMode:kCGBlendModeOverlay alpha:0.5];

替换 alpha 和混合模式以适合您的偏好。好的做法是让 BlendedImageView 保存一个 blendMode 属性。

在您的情况下,您可能需要使用与上面相同的代码来绘制所有 3 张图像的更高级的视图。

【讨论】:

你认为做 3 个视图并将它们放在一起就可以了吗? 我不确定。只要 drawInRect: 与其他视图混合,它就可以工作。如果没有的话,只画三个视图也不是很难 我刚刚尝试了多个 UIImageViews 相互重叠,它似乎不起作用:( 有人知道其他解决方案吗?

以上是关于在 Photoshop 等 UIImageViews 上设置混合模式的主要内容,如果未能解决你的问题,请参考以下文章

将图像从子视图绘制到父视图

借助Photoshop,Illustrator等设计软件进行WPF图形图像的绘制

Photoshop

Photoshop cc卸载不掉,我的是绿色版。在线等,急

Photoshop教程

怎样在苹果电脑上用photoshop