library(pixelShift)
library(imager)
library(data.table)
library(grid)
pic <- load.image("./inst/img/input/myImage.jpg")
plot(pic)
## Shift one way
rowS <- seq(1, ncol(pic), by = 50)
rowE <- c((na.omit(shift(rowS, type = "lead")) - 1), ncol(pic))
rowMove <- rep(30, length(rowS)) * c(seq(-3, 3), seq(4, -4))
pixelShift(pic,
"./inst/img/output/myImage_ex01.jpg",
rowS,
rowE,
rowMove)
## Shift another way
rowS <- seq(1, ncol(pic), by = 50)
rowE <- c((na.omit(shift(rowS, type = "lead")) - 1), ncol(pic))
rowMove <- rep(30, length(rowS)) * c(seq(3, -3), seq(-4, 4))
pixelShift(pic,
"./inst/img/output/myImage_ex02.jpg",
rowS,
rowE,
rowMove)
## Shift GIF
rowS <- seq(1, ncol(pic), by = 50)
rowE <- c((na.omit(shift(rowS, type = "lead")) - 1), ncol(pic))
rowShiftSeq <- c(seq(-4, 4), seq(3, -3))
length(rowS)
length(rowShiftSeq)
rowMove <- rep(35, length(rowS)) * rowShiftSeq
shiftRowMove <- function(x){
rowMove <<- c(rowMove[length(rowMove)], rowMove[1:(length(rowMove)-1)])
}
rowMoves <- lapply(1:length(rowMove), shiftRowMove)
shiftTabs <- lapply(rowMoves, function(rowMove) data.table(rowS, rowE, rowMove))
gifPix <- function(x){
pixelShift(pic,
paste0("./inst/img/output/myImage",
sprintf(fmt="%02d", x),
"_gif.jpg"),
shiftTabs[[x]]$rowS,
shiftTabs[[x]]$rowE,
shiftTabs[[x]]$rowMove)
}
library(parallel)
cl <- makeCluster(detectCores(), type = "FORK")
parLapply(cl, 1:length(shiftTabs), gifPix)
stopCluster(cl)
system("convert -delay 10 ./inst/img/output/*_gif.jpg ./inst/img/output/myImage.gif")
file.remove(list.files("./inst/img/output", "_gif.jpg$", full.names = T))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.