RMagick中根据宽高筛选magick-image对象并旋转指定图片的方法
解决方法
报错原因
magick-image类对象是外部指针格式存储的图片集合,不属于数据框/ tibble 类型,因此不支持直接调用$取属性、dplyr::filter()筛选等结构化数据操作,你通过image_info()提取属性的思路是正确的,只需要匹配行索引到原图片对象即可完成筛选和操作。
完整实现流程
1. 加载依赖、读取图片
library(magick) library(dplyr) # 读取目标路径下所有jpg图片 img_raw <- list.files(path = "D:/Pictures/", pattern = "\\.jpg$", full.names = TRUE) %>% image_read()
2. 提取属性、筛选待处理图片索引
# 提取所有图片的宽高等属性 img_attr <- image_info(img_raw) # 筛选宽>高的横向图片索引,可根据实际需求调整筛选条件 rotate_index <- which(img_attr$width > img_attr$height)
3. 批量旋转指定图片
# 对筛选出的图片执行90度旋转,可根据方向需求调整角度为-90、180等 img_raw[rotate_index] <- image_rotate(img_raw[rotate_index], degrees = 90)
4. 导出处理后的图片
# 提取原文件名用于导出时保留原名 file_names <- list.files(path = "D:/Pictures/", pattern = "\\.jpg$", full.names = FALSE) # 导出到目标文件夹,需提前新建D:/Pictures/processed文件夹 image_write(img_raw, path = paste0("D:/Pictures/processed/", file_names))
补充说明
- 如果不需要保留未旋转的图片,可直接导出筛选后的子集:
image_write(img_raw[rotate_index], path = 你的导出路径) - 旋转角度可根据实际图片的倾倒方向调整,部分带EXIF方向信息的图片可先调用
image_auto_orient()自动校正方向。
内容的提问来源于stack exchange,提问作者eggrandio
相关产品推荐
相关产品推荐

