如何使用gnuplot创建超过72dpi的PNG图像?

5
我希望创建一个PNG图像在gnuplot中,并在MS-Word中使用。然而,如果我使用
set terminal pngcairo enhanced font "Times New Roman,12.0" size 15cm,11cm  

质量较差。我读到GNUPLOT只使用72dpi。有没有办法增加这个数字?
2个回答

5

只需以像素为单位指定所需的分辨率,而不是以厘米为单位:

set terminal pngcairo enhanced font "Times New Roman,12.0" size 1500,1100

将生成一个宽度为1500像素,高度为1100像素的图像。另请参阅help pngcairo:

输出的默认大小为640 x 480像素。 size选项可更改为用户请求的任何大小。默认情况下,X和Y尺寸被认为是以像素为单位,但其他单位也是可能的(目前为厘米和英寸)。以厘米或英寸为单位给出的大小将被转换为假定分辨率为72 dpi的像素。


这似乎并不能解决手头的问题,因为图像只是一个 dpi 为 72 的拉伸图表。事实上,这正是原始用户不想要的。 - Titus

0

我也在想同样的问题,比如为输出设置默认DPI选项(例如当您需要将其以相同大小导入PowerPoint时)。

我编写了一个简短的Python脚本,将必要的信息添加到头文件中(可能不是很干净,但在Python 3中可以正常工作)。 您只需要更改要使用的文件名和DPI即可。 我现在使用gnuplot system()命令自动调用此脚本以在打印图表后更改DPI。

祝好, Alex

filename = '/test.png' #path to file
dpi = 300.             #dpi you want

####
import binascii
DpM = dpi/0.0254 #dots per meter
DpM_hex = ('%08x' % (int(DpM)))
chunkType = "70485973" #type: pHYS
length = ('%08x' % (int(9))) #length is 9
str_con = chunkType + DpM_hex + DpM_hex + "01"
crc = ('%08x' % (binascii.crc32(binascii.unhexlify(str_con.encode('utf-8')))))
output_str = length + str_con + crc

try: 
    with open(filename, 'rb') as f:
        content = f.read()
        png_str = (binascii.hexlify(content)).decode('utf-8')
        if png_str.find(length+chunkType)>=0:
            pos1 = png_str.find(length+chunkType)
            pos2 = pos1+len(output_str)
            png_new = png_str[:pos1] + output_str + png_str[pos2:]
        else:
            pos = 66 #position where additional chunk is inserted, = end of mandatory PNG header info
            png_new = png_str[:pos] + output_str + png_str[pos:]
    
    with open(filename, 'w+b') as f:
        f.write(binascii.unhexlify(png_new.encode('utf-8')))
        f.close()
        print("Done")
        print(filename)
    print("Done")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接