Ios Bezier路径裁剪的图像边界

Ios Bezier路径裁剪的图像边界,ios,uibezierpath,clip,Ios,Uibezierpath,Clip,假设我有一个图像,它是通过将另一个图像绘制到其中,并使用贝塞尔路径来剪裁该图形来渲染的。我希望能够以这样的方式渲染生成的图像,使新图像的边缘看起来像是斜切的。我在想,我想要的是用一些线的厚度来绘制贝塞尔路径,这些线的颜色随路径的角度而变化。是否有一个功能可以自动执行此过程?我想一定有,否则就不会有这样一个按钮数组等等,以这种方式呈现 例如,应用程序图标就是我正在寻找的一个例子。它们在右下角有一种阴影,在左上角有一种高光。这完全取决于你在寻找什么。您可以使用2D卷积内核,类似于上面所描述的 我不确

假设我有一个图像,它是通过将另一个图像绘制到其中,并使用贝塞尔路径来剪裁该图形来渲染的。我希望能够以这样的方式渲染生成的图像,使新图像的边缘看起来像是斜切的。我在想,我想要的是用一些线的厚度来绘制贝塞尔路径,这些线的颜色随路径的角度而变化。是否有一个功能可以自动执行此过程?我想一定有,否则就不会有这样一个按钮数组等等,以这种方式呈现


例如,应用程序图标就是我正在寻找的一个例子。它们在右下角有一种阴影,在左上角有一种高光。

这完全取决于你在寻找什么。您可以使用2D卷积内核,类似于上面所描述的


我不确定它是否在iOS上可用,但核心映像附带了过滤器,它可以产生您想要的东西

这完全取决于你在找什么。您可以使用2D卷积内核,类似于上面所描述的


我不确定它是否在iOS上可用,但核心映像附带了过滤器,它可以产生您想要的东西

我已经为合理简单的形状编写了一个倒角算法。该算法将采用闭合路径,将其倾斜(45°插入),然后根据特定光源角度应用提供的高光/阴影颜色。它并不完美,在真正复杂的形状上,你可能无法得到你想要的效果,但我发现它适用于大多数“正常”形状(正方形、圆形、三角形、圆形矩形,甚至星星、齿轮和一些稍微复杂的形状)。该算法将通过计算路径的其他边与光源光线相交的位置,尝试应用高光/阴影。我在这里写了一篇关于它的博文:,但是这篇博文与实际代码有点过时,自从我第一次写那篇博文以来,我已经改进了它。您可以在此处找到代码:。代码是直接用“c”编写的,并且设计得尽可能快和紧凑

需要注意的几点:

  • 如果你正在为一个图像斜切一个CGPATH(如前所述),考虑用一个半转置alpha来传递高亮/阴影颜色。例如,以下颜色会产生细微的斜角效果:
UIColor*高光=[uicolorWithWhite:1 alpha:.25f]

UIColor*shadow=[uicolorWithWhite:0 alpha:.25f]

  • 请注意,此算法不会使图像本身倾斜(或弯曲图像使其看起来倾斜)。它只是在形状中绘制一个斜面。实际上,弯曲图像需要核心图像。但是,如果使用“透明度”,它看起来就像在图像顶部有一个透明的斜面。这也许足够了
备选方案

你也可以稍微作弊,在笔划路径上画一个渐变。我想很多人都没有注意到这个小小的核心图形功能,但是
CGPathCreateCopyByStrokingPath
是一个很棒的小功能。实际上,它允许您通过抚摸另一条路径来创建新路径。然后,您可以选择返回的路径并对其应用渐变以创建“斜切外观”。例如,假设我有一个
UIBezierPath*path
变量,它表示要斜切的贝塞尔路径

        UIBezierPath *path = [self imageClippingPath];
        CGPathRef stroke = CGPathCreateCopyByStrokingPath(path.CGPath, NULL, 2.0f, path.lineCapStyle, path.lineJoinStyle, path.miterLimit);
        UIBezierPath *strokedPath = [UIBezierPath bezierPathWithCGPath:stroke];
        [self drawGradientInPath:strokedPath inContext:context];
        CGPathRelease(stroke);
请注意,如果剪辑到路径,将得到一个仅为1.0f宽的笔划,因为笔划是围绕路径进行的,剪辑会将笔划切成两半


通过创建两个不同宽度的单独笔划路径,可以创建更好的“倒角”:例如,宽度为4.0f的“内部”倒角和宽度为2.0f的“外部”倒角。首先绘制“内部”斜面,然后将外部斜面(内部宽度的一半)层叠在其上。如果还将上下文剪裁到正在笔划的路径,则最终会得到两个单独的斜面,每个斜面的大小为1.0f。请记住,笔划是围绕路径进行的。所以斯托克城只有一半的球员在禁区内。如果你用不同于外斜角的渐变填充内斜角,你可以创建一个嵌入按钮的外观,模仿苹果自己的许多外观。仔细看了苹果的按钮后,我很确定这正是它们(或非常类似的东西)获得斜面外观的方法。

我已经为合理简单的形状编写了一个斜面算法。该算法将采用闭合路径,将其倾斜(45°插入),然后根据特定光源角度应用提供的高光/阴影颜色。它并不完美,在真正复杂的形状上,你可能无法得到你想要的效果,但我发现它适用于大多数“正常”形状(正方形、圆形、三角形、圆形矩形,甚至星星、齿轮和一些稍微复杂的形状)。该算法将通过计算路径的其他边与光源光线相交的位置,尝试应用高光/阴影。我在这里写了一篇关于它的博文:,但是这篇博文与实际代码有点过时,自从我第一次写那篇博文以来,我已经改进了它。您可以在此处找到代码:。代码是直接用“c”编写的,并且设计得尽可能快和紧凑

需要注意的几点:

  • 如果你正在为一个图像斜切一个CGPATH(如前所述),考虑用一个半转置alpha来传递高亮/阴影颜色。例如,以下颜色会产生细微的斜角效果:
UIColor*高光=[uicolorWithWhite:1 alpha:.25f]

UIColor*shadow=[uicolorWithWhite:0 alpha:.25f]

  • 请注意,此算法不会使图像本身倾斜(或弯曲图像使其看起来倾斜)。它只是在形状中绘制一个斜面。实际上,弯曲图像需要核心图像。但是,如果使用透明度,它可能看起来像t