Php 如何以编程方式将Photoshop过滤器Pixelate>Crystalize应用于图像?
我需要通过一些API或库将结晶像素过滤器应用于图像。此效果应如下所示: 所以这不是通常的像素效果,像素不是方形的Php 如何以编程方式将Photoshop过滤器Pixelate>Crystalize应用于图像?,php,api,unity3d,photoshop,image-manipulation,Php,Api,Unity3d,Photoshop,Image Manipulation,我需要通过一些API或库将结晶像素过滤器应用于图像。此效果应如下所示: 所以这不是通常的像素效果,像素不是方形的 有什么API我可以使用吗?我一直在寻找这个,但我有点迷路了。哎呀,我刚刚注意到你是用PHP而不是Python标记的-对不起!我现在就把它作为参考,改天可能会做一个PHP版本 我对此进行了快速尝试,效果很好: #!/usr/bin/env python3 import numpy import random import math import sys from PIL import
有什么API我可以使用吗?我一直在寻找这个,但我有点迷路了。哎呀,我刚刚注意到你是用PHP而不是Python标记的-对不起!我现在就把它作为参考,改天可能会做一个PHP版本 我对此进行了快速尝试,效果很好:
#!/usr/bin/env python3
import numpy
import random
import math
import sys
from PIL import Image
def crystallize(im, cnt):
# Make output image same size
res = np.zeros_like(im)
h, w = im.shape[:2]
# Generate some randomly placed crystal centres
nx = np.random.randint(0,w,cnt,dtype=np.uint16)
ny = np.random.randint(0,h,cnt,dtype=np.uint16)
# Pick up colours at those locations from source image
sRGB = []
for i in range(cnt):
sRGB.append(im[ny[i],nx[i]])
# Iterate over image
for y in range(h):
for x in range(w):
# Find nearest crystal centre...
dmin = sys.float_info.max
for i in range(cnt):
d = (y-ny[i])*(y-ny[i]) + (x-nx[i])*(x-nx[i])
if d < dmin:
dmin = d
j = i
# ... and copy colour of original image to result
res[y,x,:] = sRGB[j]
return res
# Open image, crystallize and save
im = Image.open('duck.jpg')
res = crystallize(np.array(im),200)
Image.fromarray(res).save('result.png')
它将此转变为:
为此:
或者,如果你选择500颗水晶:
速度可以通过减少到256种颜色和一个托盘化的图像来提高,为每种颜色找到最接近的颜色,然后简单地在LUT中查找它们。也许是一份雨天的工作
关键词:Python、voronoi、crystal、crystal、Photoshop、filter、image、image processing、Numpy、PIL、Pill。以下是如何在Python中使用Photoshop api应用Crystalize filter的示例
Crystalize是一种图像处理算法,可以用多种不同的语言实现。我建议选择一个首选的技术堆栈,缩小你的问题范围。e、 我发现了一个Scala实现,可能在谷歌搜索几分钟后就帮不上忙了……令人惊讶的答案。
from win32com.client import Dispatch, GetActiveObject
app = GetActiveObject("Photoshop.Application")
fileName = "C:\Github\Test.psd"
docRef = app.Open(fileName)
docRef.ActiveLayer = docRef.ArtLayers.Item(1)
def applyCrystallize(cellSize):
cellSizeID = app.CharIDToTypeID("ClSz")
eventCrystallizeID = app.CharIDToTypeID("Crst")
filterDescriptor = Dispatch('Photoshop.ActionDescriptor')
filterDescriptor.PutInteger(cellSizeID, cellSize)
app.ExecuteAction(eventCrystallizeID, filterDescriptor)
applyCrystallize(25)