- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用PythonMagickWand使用Shepards distortion在图像上。您还可以查看the source of distort.c由 ImageMagick 使用。
PythonMagickWand 默认情况下不支持 Shepards 失真。为了解决这个问题,我添加了:
ShepardsDistortion = DistortImageMethod(15)
到 PythonMagickWand 的第 544 行 ( See here for my modified PythonMagicWand )。 15指针指向distort.h MagickWand 源代码(第 51 行),其中 ShepardsDistortion 是列表中的第 15 项。这适合所有其他支持的失真方法。
现在,我可能做错的事情是假设 PythonMagickWand 支持的现有扭曲方法使用与 Shepards 相同类型的参数。他们可能不会,但我不知道如何判断。我知道distort.c正在做这项工作,但我无法确定它接受的参数是相同还是不同。
我有以下代码(片段):
from PythonMagickWand import *
from ctypes import *
arrayType = c_double * 8
pointsNew = arrayType()
pointsNew[0] = c_double(eyeLeft[0])
pointsNew[1] = c_double(eyeLeft[1])
pointsNew[2] = c_double(eyeLeftDest[0])
pointsNew[3] = c_double(eyeLeftDest[1])
pointsNew[4] = c_double(eyeRight[0])
pointsNew[5] = c_double(eyeRight[1])
pointsNew[6] = c_double(eyeRightDest[0])
pointsNew[7] = c_double(eyeRightDest[1])
MagickWandGenesis()
wand = NewMagickWand()
MagickReadImage(wand,path_to_image+'image_mod.jpg')
MagickDistortImage(wand,ShepardsDistortion, 8, pointsNew, False)
MagickWriteImage(wand,path_to_image+'image_mod22.jpg')
我收到以下错误:
MagickDistortImage(wand,ShepardsDistortion, 8, pointsNew, False)
ctypes.ArgumentError: argument 4: <type 'exceptions.TypeError'>: expected LP_c_double instance instead of list
我知道 pointNew 是提供参数的错误方式。但我只是不知道什么是正确的格式。这是在终端中运行时有效的扭曲命令示例:
convert image.jpg -virtual-pixel Black -distort Shepards 121.523809524,317.79638009 141,275 346.158730159,312.628959276 319,275 239.365079365,421.14479638 232,376 158.349206349,483.153846154 165,455 313.015873016,483.153846154 300,455 0,0 0,0 0,571.0 0,571.0 464.0,571.0 464.0,571.0 0,571.0 0,571.0 image_out.jpg
所以我想问题是:如何创建 PythonMagickWand 接受的 c_double 列表? 或者我将 Shepards Distortion 添加到 PythonMagickWand 中的做法完全错误吗?
我基本上需要重新创建终端命令。我已经通过使用 subprocess 从 Python 运行命令来使其工作,但这不是我想要的方式。
最佳答案
from PythonMagickWand import *
from ctypes import *
arrayType = c_double * 8
pointsNew = arrayType()
pointsNew[0] = c_double(121.523809524)
pointsNew[1] = c_double(317.79638009)
pointsNew[2] = c_double(141)
pointsNew[3] = c_double(275)
pointsNew[4] = c_double(346.158730159)
pointsNew[5] = c_double(312.628959276)
pointsNew[6] = c_double(319)
pointsNew[7] = c_double(275)
ShepardsDistortion = DistortImageMethod(14)
MagickWandGenesis()
wand = NewMagickWand()
MagickReadImage(wand,'/home/user/image.png')
MagickDistortImage(wand,ShepardsDistortion, 8, pointsNew, False)
MagickWriteImage(wand,'/home/user/image_mod22.jpg')
更具体地说,对我来说,是以下行:
ShepardsDistortion = DistortImageMethod(14)
这对我来说已经解决了!再次感谢Reddit的NeedMoreBeer .
关于PythonMagickWand Shepards 扭曲(ctypes LP_c_double 问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2989543/
我正在尝试使用PythonMagickWand使用Shepards distortion在图像上。您还可以查看the source of distort.c由 ImageMagick 使用。 Pyth
我尝试将 SVG 转换为 PNG。结果图片有一个白色背景,我需要透明。 代码示例: wand = NewMagickWand() MagickReadImage(wand,tmp_file_name)
我是一名优秀的程序员,十分优秀!