R语言也能玩ps?magick包你值得拥有

作者: 天善智能 | 来源:发表于2017-11-08 14:26 被阅读50次

    感谢关注天善智能,走好数据之路↑↑↑

    欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定!

    本文作者:天善智能社区专家鲁伟

    天善智能社区地址:https://www.hellobi.com/

    今天要给大家介绍的是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

    ##  $ ghostscript       : 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一类的转换函数来实现对图片的裁剪与编辑处理。比如说:

    image_crop(image, "100x150+50")

    image_scale(image, "200")

    image_scale(image, "x200")

    image_fill(image, "blue", "+100+200")

    image_border(frink, "red", "20x10")

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

    先读入一个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        0

    image_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

    天善学院双十一特价课程限时优惠进行中,五场微课联播免费学习,欢迎关注。https://www.hellobi.com/1111

    11月6日年迈的数据分析师教你做年终总结报告

    陈丹奕:知乎大神,前百度资深数据分析师

    11月7日机器学习与工业实践

    邹博:中国科学院副研究员,天津大学特聘教授

    11月8日 贝叶斯算法与新闻分类实战

    唐宇迪:深度学习领域多年一线实践研究专家,同济大学硕士

    11月9日破冰Python,1小时快速入门

    王大伟: Python爱好者社区公众号负责人,擅长网络爬虫、数据分析

    11月10日 职场也有双11--你贱卖自己的5大常用技巧

    陈文:8年经验数据分析师,资深业务顾问

    相关文章

      网友评论

        本文标题:R语言也能玩ps?magick包你值得拥有

        本文链接:https://www.haomeiwen.com/subject/uyzemxtx.html