用R語言對JPG/JPEG圖片進行背景透明處理
作者:xxx
我們在準備會議或工作報告時經(jīng)常要把單位或組織的徽標插入到幻燈片中,但從照片或網(wǎng)上截屏獲得的徽標圖片的背景色通常和我們幻燈片的背景不搭配,能把徽標本身的背景色透明掉就好了。如果你會用R,過程就非常簡單,只要幾行代碼。
JPG/JPEG圖像背景是不能透明的,但PNG圖像可以。代碼如下,應(yīng)用前提是背景和徽標色能較好地區(qū)分(稍修改也可以做背景色替換):
- library(jpeg)
- library(png)
- FILTER <- matrix(c("JPG file", "*.jpg", "JPEG file", "*.jpeg"), ncol = 2, byrow = T)
- img <- choose.files(caption = "Select JPG files", filters = FILTER, index = 1, multi=T)
- for(i in 1:length(img)){
- x <- readJPEG(img[i])
- dimx <- dim(x)
- n <- dimx[1]*dimx[2]
- r <- x[1:n]
- g <- x[(n+1):(2*n)]
- b <- x[(2*n+1):(3*n)]
- ps <- 5; ps <- dimx[1]*(ps-1) + ps # 背景取值,ps為左上到右下角的像素,5。按情況修改
- tv <- 0.1 # tv為容差范圍,0-1取值,越小越精確
- sel <- abs(r-r[ps])<tv & abs(g-g[ps])<tv & abs(b-b[ps])<tv
- alpha <- rep(1, n)
- alpha[sel] <- 0
- x <- array(c(x, alpha), dim=c(dimx[1:2], 4))
- writePNG(x, gsub("(.+\\.)(jpg|jpeg)$","\\1png", img[i], ignore.case = TRUE))
- }
- winDialog("ok", "Work done!")
下面是幾張網(wǎng)站徽標截圖進行透明處理后在幻燈片中的疊加效果:

責任編輯:彭凡
來源:
網(wǎng)易博客