如何批量将图片调整为23.6cm宽并保持原宽高比?
按厘米单位批量调整图片宽度并保持宽高比
magick包支持直接用物理单位(比如厘米)调整图片尺寸,不用手动换算像素,只要把dpi参数设置对就行,给你修正后的代码:
library(magick) # 获取输入文件夹里的所有图片(过滤格式,避免处理非图片文件) original_images <- list.files('Data/input/Images', pattern = "\\.(jpg|jpeg|png|bmp)$", full.names = TRUE) for(image_path in original_images){ image_name <- basename(image_path) print(image_name) # 读取图片时指定dpi,保证物理尺寸计算准确 og_image <- image_read(image_path, density = 300) # 直接指定宽度为23.6cm,自动按原比例调整高度 resized_image <- image_resize(og_image, "23.6cm") # 保存时同样指定dpi,确保输出的物理尺寸符合要求 output_path <- paste0('Data/output/Images/', image_name) image_write(resized_image, path = output_path, density = 300) }
关键说明:
- 直接用物理单位:
image_resize支持cm、in这类单位,写"23.6cm"就固定了宽度,magick会自动根据dpi算出对应像素数,同时保留原宽高比。 - dpi要前后一致:读取和保存时都设
density = 300(你可以根据需求改成72、150等),物理尺寸的换算全靠dpi——1英寸=2.54厘米,dpi就是每英寸的像素数,固定dpi才能保证输出图片的实际宽度是23.6cm。 - 过滤图片格式:加
pattern参数只处理常见图片类型,避免误操作非图片文件;用full.names = TRUE直接获取完整路径,不用手动拼接输入路径,代码更简洁。 - 自动保留宽高比:只指定宽度的情况下,
image_resize会自动按原比例计算对应高度,无需额外设置参数。
内容的提问来源于stack exchange,提问作者z star
相关产品推荐
相关产品推荐

