R语言也能玩ps?magick包你值得拥有
卖萌控的博客
点击这里进入电脑版页面!体验更好
R语言也能玩ps?magick包你值得拥有
2022-6-23 萌小白


作者:鲁伟,热爱数据,坚信数据技术和代码改变世界。R语言和Python的忠实拥趸,为成为一名未来的数据科学家而奋斗终生。个人公众号:数据科学家养成记 (微信ID:louwill12)



今天要给大家介绍的是2017年的一款新包——magick包。可能大家看到推文题目也都知道了,这是一款图片与图像处理的扩展包,以后ps能做的R语言一定程度上也可以做啦。毕竟从大数据的角度来讲,图片图像数据也是数据嘛。话不多说,小编带大家直接上手magick包。



安装



安装和载入magick包后,可查看在R语言中支持哪些图片格式。



install.packages("magick")



library(magick)



str(magick::magic_config())



## List of 21## $ version :Class 'numeric_version' hidden list
of 1## ..$ : int [1:4] 6 9 6 6## $ modules : logi FALSE## $ cairo : logi
TRUE## $ fontconfig : logi TRUE## $ freetype : logi TRUE## $ fftw :
logi FALSE## $ ghost : logi FALSE## $ jpeg : logi TRUE## $ lcms : logi
FALSE## $ libopenjp2 : logi FALSE## $ lzma : logi TRUE## $ pangocairo :
logi TRUE## $ pango : logi TRUE## $ png : logi TRUE## $ rsvg : logi
TRUE## $ tiff : logi TRUE## $ webp : logi TRUE## $ wmf : logi FALSE## $
x11 : logi FALSE## $ xml : logi TRUE## $ zero-configuration: logi FALSE



可见magick包在R语言中支持大部分图片格式,常见的jpeg和png格式就足以解决大部分图片格式问题。



图片输入与输出



magick包可以通过image_read函数直接从文件路径、URL和图片数据原始向量中读入图片,读入成功可以显示图片的一些基本信息。先读入一只老虎看看:



tiger<-image_read('http://jeroen.github.io/images/tiger.svg')



image_info(tiger)## format width height colorspace filesize## 1 png 900 900 sRGB 0






图片读入之后还可以通过image_write函数将图片输出,另存为任何图片格式也是可以的。



image_write(tiger, path="tiger.png", format="png")



图片处理



如果是仅仅读入读出图片,那magick包也没多大意义了。一般图片处理软件中的功能magick也可以处理。



裁剪与编辑



magick提供了一些形如AxB+C+D一类的转换函数来实现对图片的裁剪与编辑处理。比如说:




下面通过实例看看各函数用法含义。



先读入一个celtic图片:



celtics <- read_image("F:/R/celtics.png")



print(celtics)






加个20x10的绿框看看:



image_border(celtics,"green","20x10")






从右边裁掉5个尺寸:



image_crop(celtics,"100x150+5")






放个大看看:



image_scale(celtics,"200")






换个边儿看看:



image_flop(celtics)






其他的像旋转、倒置、缩放等操作都是有类似函数可以处理的,具体可查阅magick帮助文档。



再上个背景色,把绿凯变成粉凯:



image_backgroud(celtics,"pink",flattern=TRUE)






虚化一下绿凯:



image_blur(celtics,10,5)






类似的处理操作有点多,小编就不一一展示了。有兴趣的朋友可以自己去探索。



添加文本



magick包也提供了为图片添加文本信息的功能,且看实例。



为绿凯喊个口号:



image_annotate(celtics, "Beat LA!", size=35, gravity="southwest", color="green")






管道操作进行链接



如果你嫌一次只进行一个处理太麻烦,magick和magrittr包联合使用大可以让你实现这些操作。相信你在dplyr包中已经见识到了这些%>%管道操作符的厉害了。



library(magrittr)



image_read("F:/R/celtics.png")%>%image_rotate(270)%>%image_background("pink", flatten=TRUE)%>%image_border("green", "10x10")%>%image_annotate("Beat LA!", color="black", size=30)






图片向量



以上都是针对单张图片进行处理的。magick包里面所有函数都具有向量化功能,可以支持图层叠加、拼图以及动图处理。先看个动态的地球:



earth<-image_read("https://jeroen.github.io/images/earth.gif")



earth<-image_scale(earth, "200")



length(earth)print(earth)






叠加



我们也可以像在ps里面一样进行图层叠加。



bigdata<-image_read('https://jeroen.github.io/images/bigdata.jpg')



frink<-image_read("https://jeroen.github.io/images/frink.png")



logo<-image_read("https://www.r-project.org/logo/Rlogo.png")



img<-c(bigdata, logo, frink)



img<-image_scale(img, "300x300")



image_info(img)## format width height colorspace filesize## 1 JPEG 300 225 sRGB 0## 2 PNG 300 263 sRGB 0## 3 PNG 148 300 sRGB 0image_mosaic(img)






组合



也可以把几张图片组合在一起。虽然比较丑,但重在功能展示一下。



left_to_right<-image_append(image_scale(img, "x200"))



image_background(left_to_right, "white", flatten=TRUE)






加个stack参数也可以竖着组合,这里不再演示。



扫描文档为图片



magick还可以将指定PDF文档扫描为png等图片格式的形式。且看例子:



manual<-image_read('https://cran.r-project.org/web/packages/magick/magick.pdf', density="72x72")



image_info(manual)



image_convert(manual[1], "png", 8)



这里需要借助pdftools包来实现:



library(pdftools)



bitmap<-pdf_render_page('https://cran.r-project.org/web/packages/magick/magick.pdf', page=1, dpi=72, numeric=FALSE)



image_read(bitmap)






动图



magick做GIF动图也是毫无压力的:



image_animate(image_scale(img, "200x200"), fps=1, dispose="previous")






最后展示一个R logo的动态图:



newlogo<-image_scale(image_read("https://www.r-project.org/logo/Rlogo.png"), "x150")



oldlogo<-image_scale(image_read("https://developer.r-project.org/Logo/Rlogo-3.png"), "x150")



frames<-image_morph(c(oldlogo, newlogo), frames=10)



image_animate(frames)






总结



从上面的演示大家也都看到了,magick包包含了大部分ps所具备的功能,以后用R语言p个图什么的也都是分分钟的事啦。



参考资料:


http://127.0.0.1:19145/library/magick/doc/intro.html
发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容