我需要生成 50x50 png 图标,我按如下方式操作:
- 创建一个半径为 25 的圆的 tikz 文件。
\documentclass[border=0pt]{standalone} \usepackage{tikz} \begin{document} \begin{tikzpicture} \draw(0,0) circle (25); \end{tikzpicture} \end{document}
运行以下命令将 pdf 转换为 png 文件:
转换-密度 2 测试.pdf 测试.png
检查 png 文件大小:39x39 像素
这样看起来图像尺寸较小,质量较差!我希望图像为 50x50,线宽为 1 像素。获得正确像素尺寸和良好质量的正确方法是什么?
答案1
钛钾Z 使用厘米作为默认单位,但光栅化使用每英寸点数。所以我们要么需要做一些数学运算,要么需要告诉 Ti钾Z 使用英寸。
半径为 25 厘米的圆适合 50 × 50 厘米的正方形。如果以每英寸 2 点 (= dpi = px/in) 将其栅格化,则得到 50 厘米 × 2 px/in × 0.393701 in/cm = 约 39 像素。这正是您得到的。
由于使用 dpi(默认的光栅化单位)进行光栅化意味着将英寸转换为像素,因此您可以在 Ti 中使用英寸作为基本单位钾Z 图片(例如使用绘制一个半径为 25 英寸的圆圈\draw(0,0) circle (25in);
),然后使用 1 dpi 将其栅格化。
这里只有一个问题:在 Ti钾Z,边框总是会扩展到路径的两侧,这就是为什么圆的边框会被剪掉一半。所以,你实际上需要把它画小半英寸,确保它不会被剪掉。
因此,以下使用 1 dpi(可能使用convert -density 1 filename.pdf filename.png
)进行栅格化应该可以得到您想要的结果(我没有尝试使用您的方法对其进行栅格化):
\documentclass[border=0pt,tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\fill[transparent] (-25in,-25in) rectangle (25in,25in);
\draw[line width=1in] (0,0) circle (24.5in);
\end{tikzpicture}
\end{document}
结果:一个 50 × 50 像素的正方形,带有一个边框为 1 像素的圆圈。
答案2
在此示例中,我使用 ghostscript 将 pdf 输出翻录为 900 dpi、900x900 像素的光栅 png。您可以使用 指定所需的任何 dpi,-r
并使用 指定图像大小-g
。
gs -sDEVICE=pngalpha -dPDFFitPage -r900 -g900x900 -o test.png test.pdf
\documentclass[border=0pt]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw(0,0) circle (25);
\end{tikzpicture}
\end{document}
答案3
我想用python画小图标:
#!/usr/bin/env python3
from skimage import draw
import numpy as np
import cv2
def main():
circle()
return
def circle():
r = 25
arr = np.zeros((2*r, 2*r),dtype=np.uint8)
arr.fill(255)# white
rr, cc = draw.circle_perimeter(r, r, radius=r-1, shape=arr.shape)
arr[rr, cc] = 0 #black
cv2.imwrite("logo.png",arr)
winname = "test"
cv2.imshow(winname,arr)
cv2.waitKey(0)
return
if __name__ == "__main__":
main()