我会改变该链接的背景色和前景色到不以你的形象出现,并使用webkit2png
渲染页面的颜色。然后使用ImageMagick
查找与您的链接颜色相对应的颜色块以制作图像映射。
所以,具体而言,假设你改变你的HTML设置链接的前景色和背景色为红色(#FF0000),使你的HTML看起来是这样的:
<p>
A link to Google follows:
<a style="color:#ff0000;background:#ff0000" href="www.google.com">Google</a> - a link to Google.
</p>
然后你做
webkit2png a.html
它给你一个PNG文件是这样的:
然后,您使用ImageMagick
上色一切不红黑色,像这样:
convert fileUsersmarktmpahtml-full.png -colorspace RGB -fill black +opaque "#ff0000" x.png
那你告诉ImageMagick的修剪的背景,只留下红块,并查看其坐标与identify
,你可以看到该链接将获取图像映射的坐标。
convert out.png -trim y.png
identify y.png
y.png PNG 47x18 800x600+176+16 8-bit sRGB 2c 3.18KB 0.000u 0:00.000
您可以看到红色块位于图像的偏移+ 176 + 16处。
你可能想要做一个链接的时间,并重新渲染,或多个链接。如果您执行多个链接,请提出另一个关于在图像中查找多个斑点的问题,或者搜索其他答案(由我执行),其中包含connected-components
。如果您遇到问题,比如,如何选择未使用的颜色,或找到多个斑点,只是问了另一个问题 - 它们是免费的:-)
如果你有多个环节,更是这样的:
<!DOCTYPE html>
<html>
<body>
<p>Here comes a link...
<a style="color:#ff0000;background:#ff0000" href="www.google.com">Google</a> - a link to Google.</p>
<p>And there will be another (longer) one along shortly...
<a style="color:#ff0000;background:#ff0000" href="www.google.com">Google, but longer</a> - a link to Google.</p>
</body>
</html>
你运行webkit2png
如上然后anayse这样的:
convert out-full.png -colorspace RGB -fuzz 10% \
-fill black +opaque red \
-fill white -opaque red \
-define connected-components:verbose=true \
-define connected-components:area-threshold=100 \
-connected-components 4 -auto-level \
output.png
输出
Objects (id: bounding-box centroid area mean-color):
0: 800x600+0+0 399.8,301.1 476976 rgba(0,0,0,1)
2: 121x18+357+50 417.0,58.5 2178 rgba(255,255,255,1)
1: 47x18+140+16 163.0,24.5 846 rgba(255,255,255,1)
现在您可以看到与第二行和第三行中的链接对应的blobs
。
convert input.png -crop 121x18+357+50 firstLink.png
convert input.png -crop 47x18+140+16 secondLink.png
什么问题?我可以在图像中看到另一种颜色的链接,并且它在文本中设置得很好! – SaidbakR 2015-02-11 11:59:03
您指的是等宽字体,但您的示例显然不是等宽字体,因此您不能假设任何字符数/行数。这取决于你的角色是什么。 – halfer 2015-02-11 12:00:00
这样做的原因是什么?将文本转换为图像只会增加页面的开销。 – 2015-02-11 12:02:46