菜鸟教程小白 发表于 2022-12-12 13:36:48

ios - 如何使用 ios-image-filters 在 Photoshop 中更改 UIImage 的颜色级别?


                                            <p><p>我必须更改 <code>UIImage</code> 的颜色级别,并根据此 <a href="https://stackoverflow.com/questions/7567934/ios-change-color-channels-levels-programmatically" rel="noreferrer noopener nofollow">post</a>我正在尝试使用开源库 <a href="https://github.com/esilverberg/ios-image-filters" rel="noreferrer noopener nofollow">ios-image-filters</a>但是不知道怎么用方法<br/> <code>- (UIImage*) levels:(NSInteger)black mid:(NSInteger)mid white:(NSInteger)white;</code></p>

<p>我不是设计师,我不太了解 Photoshop :(<br/>
这是 Photoshop 的屏幕截图和我应该应用于我的 <code>UIImage</code> 的颜色级别:
<img src="/image/ahF0m.png" alt="Screenshot of photoshop"/> </p>

<p>这是我尝试使用 <code>levels</code> 方法的方法:</p>

<pre><code>UIImage *image = ;
image = ; // 0.95 is float/double and it&#39;s obviously not the good way to do what I want.
</code></pre>

<p>根据方法注释,所有参数的值都应该在 0-255 之间。
但是 Photoshop 中的 mid 参数是一个值 -9.99-0.01</p>

<p>Photoshop 中的黑白级别显然是很好的值,但我不明白中间值是如何工作的。我应该如何转换它?</p>

<p>所以我的问题是:如何像在 Photoshop 中一样使用 <code>levels</code> 方法?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我不确定它们是否完全可比。查看源代码,该库的 <code>levels</code> 方法正在调用一个简单的线性插值函数(暂时忽略 <code>white</code> 和 <code>black</code> 的东西,然后关注 <code>mid</code> 以及它如何影响 <code>color</code>):</p>

<pre><code>int calcLevelColor(int color, int black, int mid, int white)
{
    if (color &lt; black) {
      return 0;
    } else if (color &lt; mid) {
      int width = (mid - black);
      double stepSize = ((double)width / 128.0f);
      return (int)((double)(color - black) / stepSize);
    } else if (color &lt; white) {
      int width = (white - mid);
      double stepSize = ((double)width / 128.0f);
      return 128 + (int)((double)(color - mid) / stepSize);
    }

    return 255;
}
</code></pre>

<p>但是 Photoshop 在“级别”中的中点使用了一个 gamma 值,一个指数函数,其结果是 <code>color^(1/gamma)</code>,即 <code>pow(color, 1.0/gamma)</code>(其中 <code>color</code> 是介于 0.0 和 1.0 之间的值,<code>gamma</code> 大于零且小于十)。这就是为什么 Photoshop 中点的值遵循对数刻度而不是线性刻度的原因。</p>

<hr/>

<p>如果你想使用像 Photoshop 这样的中点值(无论如何,对于照片来说,它可能比这个 ios-image-filters 库中的再现更好)使用 <a href="https://stackoverflow.com/questions/13765365/how-can-i-map-photoshops-level-adjustment-to-a-core-image-filter" rel="noreferrer noopener nofollow">How can I map Photoshop&#39;s level adjustment to a Core Image filter?</a> 中讨论的 Core Image 滤镜。 .</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何使用 ios-image-filters 在 Photoshop 中更改 UIImage 的颜色级别?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/18240466/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/18240466/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何使用 ios-image-filters 在 Photoshop 中更改 UIImage 的颜色级别?