R语言中保存PNG图片未按指定尺寸和分辨率生成的问题排查
R生成PNG尺寸与DPI不符的问题解决
核心原因
PNG是像素位图格式,它的DPI(每英寸像素数)只是元数据里的提示信息,不会改变图片实际的像素数量。你用R的png()函数设置的width=35(英寸)、res=500(DPI),实际生成的像素数是35*500=17500×17500,这个是符合预期的。但Mac的Preview工具默认用屏幕标准的72DPI来计算显示尺寸,所以17500/72≈243英寸,同时没正确读取到R写入的DPI元数据,就显示成72DPI了。
验证实际像素数
右键图片→「显示简介」,查看「更多信息」里的像素尺寸,应该是17500×17500,这说明图片本身的像素规格是对的,只是元数据没被识别。
解决办法
用ragg包生成(推荐):ragg包对图片元数据的支持更完善,能正确写入DPI信息
install.packages("ragg") library(ragg) agg_png("image.png", units = "in", res = 500, width = 35, height = 35, pointsize = 40) plot(density(rnorm(1000))) dev.off()生成后用Preview查看,就能正确显示35×35英寸、500DPI。
手动补全元数据:用终端的ImageMagick工具修改已生成的图片
convert image.png -density 500 -units PixelsPerInch image_fixed.png直接指定像素尺寸:跳过单位设置,直接用像素数作为宽高,同时设置res参数写入DPI
png("image.png", width = 35*500, height = 35*500, res = 500, pointsize = 40) plot(density(rnorm(1000))) dev.off()
内容的提问来源于stack exchange,提问作者Pame
相关产品推荐
相关产品推荐

