在 ImageMagick 中处理文本中撇号的正确方法是什么
What is the correct way to handle apostrophes in text in ImageMagick
我有一个脚本,可以将 ImageMagick 命令行命令放在一起以对 PDF 文档进行处理。这些最终变得非常长,但这是一个这样的命令的代表性示例(为便于阅读而添加的第 returns 行:
magick.exe -density 300 -compress ZIP ( "c:\IMtemp.pdf[0]" -fill "#000" -stroke "#062430" -font Arial
-pointsize 12 -draw "text 535,515 'This is my test text'") "c:\IMtemp\final.pdf"
该命令运行良好。但是,文本是动态的并且来自用户输入。如果用户要包含一个撇号,命令行最终将是:
magick.exe -density 300 -compress ZIP ( "c:\IMtemp.pdf[0]" -fill "#000" -stroke "#062430" -font Arial
-pointsize 12 -draw "text 535,515 'This is my test text; it's just great'") "c:\IMtemp\final.pdf"
这当然会失败,因为撇号过早地结束了文本块。我的第一个想法是像这样转义撇号:
magick.exe -density 300 -compress ZIP ( "c:\IMtemp.pdf[0]" -fill "#000" -stroke "#062430" -font Arial
-pointsize 12 -draw "text 535,515 'This is my test text; it\'s just great'") "c:\IMtemp\final.pdf"
但这不起作用。相反,撇号被忽略,并出现文本“这是我的测试文本;它非常棒”。所以我想也许我可以使用替代字符并尝试这个:
magick.exe -density 300 -compress ZIP ( "c:\IMtemp.pdf[0]" -fill "#000" -stroke "#062430" -font Arial
-pointsize 12 -draw "text 535,515 'This is my test text; it’s just great'") "c:\IMtemp\final.pdf"
这导致文本“这是我的测试文本;它太棒了”,我想是因为 IM 没有默认为 UTF-8。我在文档中读到这可以通过向 IM 提供代码来规避并尝试过:
magick.exe -density 300 -compress ZIP ( "c:\IMtemp.pdf[0]" -fill "#000" -stroke "#062430" -font Arial
-pointsize 12 -draw "text 535,515 'This is my test text; it\u2019s just great'") "c:\IMtemp\final.pdf"
magick.exe -density 300 -compress ZIP ( "c:\IMtemp.pdf[0]" -fill "#000" -stroke "#062430" -font Arial
-pointsize 12 -draw "text 535,515 'This is my test text; it\x{2019}s just great'") "c:\IMtemp\final.pdf"
但是这些只是将反斜杠后的所有内容显示为纯文本。
我不在乎撇号是如何保留的,只要那里的内容看起来足够正确以供人类阅读和专业即可。我该如何实现?
我是 运行 通过 Lucee 服务器上的 cfExecute 进行即时通讯(运行 在 Windows / IIS 上)。
在我的 Mac OSX Sierra 和 ImageMagick 7.0.11.3
的 ImageMagick 中,弯单引号对我有用
magick -size 500x100 xc:white -fill "#000" -stroke "#062430" -font Arial -pointsize 18 \
-draw "text 30,30 'This is my test text; it’s just great'" x.png
您可以通过从文件或 stdin
将注释文本输入 ImagMagick 来避免转义和引用的所有问题。因此,如果您创建一个名为 say "annotation.txt"
的文件,其中包含:
Weird stuff with ', @ and ".
您可以告诉 ImageMagick 从该文件中读取注释(使用 @filename
)并将其放在图像上,如下所示:
magick -size 640x240 xc:magenta -gravity center -pointsize 32 -annotate -40+90 @annotation.txt result.png
同样,如果您想从其他命令将注释泵入 ImageMagick,您可以告诉 ImageMagick 读取它的 stdin
像这样:
echo "Whatever @ '" | magick -size 640x240 xc:magenta -gravity center -pointsize 32 -annotate -40+90 @- result.png
正如 Fred 在评论中友善地提醒我的那样,您需要确保您的 policy.xml
文件允许这样做。它的位置可以通过以下方式找到:
identify -list configure | grep CONFIGURE_PATH
更多关于如何编辑和安全隐患的讨论here。
我有一个脚本,可以将 ImageMagick 命令行命令放在一起以对 PDF 文档进行处理。这些最终变得非常长,但这是一个这样的命令的代表性示例(为便于阅读而添加的第 returns 行:
magick.exe -density 300 -compress ZIP ( "c:\IMtemp.pdf[0]" -fill "#000" -stroke "#062430" -font Arial
-pointsize 12 -draw "text 535,515 'This is my test text'") "c:\IMtemp\final.pdf"
该命令运行良好。但是,文本是动态的并且来自用户输入。如果用户要包含一个撇号,命令行最终将是:
magick.exe -density 300 -compress ZIP ( "c:\IMtemp.pdf[0]" -fill "#000" -stroke "#062430" -font Arial
-pointsize 12 -draw "text 535,515 'This is my test text; it's just great'") "c:\IMtemp\final.pdf"
这当然会失败,因为撇号过早地结束了文本块。我的第一个想法是像这样转义撇号:
magick.exe -density 300 -compress ZIP ( "c:\IMtemp.pdf[0]" -fill "#000" -stroke "#062430" -font Arial
-pointsize 12 -draw "text 535,515 'This is my test text; it\'s just great'") "c:\IMtemp\final.pdf"
但这不起作用。相反,撇号被忽略,并出现文本“这是我的测试文本;它非常棒”。所以我想也许我可以使用替代字符并尝试这个:
magick.exe -density 300 -compress ZIP ( "c:\IMtemp.pdf[0]" -fill "#000" -stroke "#062430" -font Arial
-pointsize 12 -draw "text 535,515 'This is my test text; it’s just great'") "c:\IMtemp\final.pdf"
这导致文本“这是我的测试文本;它太棒了”,我想是因为 IM 没有默认为 UTF-8。我在文档中读到这可以通过向 IM 提供代码来规避并尝试过:
magick.exe -density 300 -compress ZIP ( "c:\IMtemp.pdf[0]" -fill "#000" -stroke "#062430" -font Arial
-pointsize 12 -draw "text 535,515 'This is my test text; it\u2019s just great'") "c:\IMtemp\final.pdf"
magick.exe -density 300 -compress ZIP ( "c:\IMtemp.pdf[0]" -fill "#000" -stroke "#062430" -font Arial
-pointsize 12 -draw "text 535,515 'This is my test text; it\x{2019}s just great'") "c:\IMtemp\final.pdf"
但是这些只是将反斜杠后的所有内容显示为纯文本。
我不在乎撇号是如何保留的,只要那里的内容看起来足够正确以供人类阅读和专业即可。我该如何实现?
我是 运行 通过 Lucee 服务器上的 cfExecute 进行即时通讯(运行 在 Windows / IIS 上)。
在我的 Mac OSX Sierra 和 ImageMagick 7.0.11.3
的 ImageMagick 中,弯单引号对我有用magick -size 500x100 xc:white -fill "#000" -stroke "#062430" -font Arial -pointsize 18 \
-draw "text 30,30 'This is my test text; it’s just great'" x.png
您可以通过从文件或 stdin
将注释文本输入 ImagMagick 来避免转义和引用的所有问题。因此,如果您创建一个名为 say "annotation.txt"
的文件,其中包含:
Weird stuff with ', @ and ".
您可以告诉 ImageMagick 从该文件中读取注释(使用 @filename
)并将其放在图像上,如下所示:
magick -size 640x240 xc:magenta -gravity center -pointsize 32 -annotate -40+90 @annotation.txt result.png
同样,如果您想从其他命令将注释泵入 ImageMagick,您可以告诉 ImageMagick 读取它的 stdin
像这样:
echo "Whatever @ '" | magick -size 640x240 xc:magenta -gravity center -pointsize 32 -annotate -40+90 @- result.png
正如 Fred 在评论中友善地提醒我的那样,您需要确保您的 policy.xml
文件允许这样做。它的位置可以通过以下方式找到:
identify -list configure | grep CONFIGURE_PATH
更多关于如何编辑和安全隐患的讨论here。