This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.
When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:
summary(cars)
## speed dist
## Min. : 4.0 Min. : 2.00
## 1st Qu.:12.0 1st Qu.: 26.00
## Median :15.0 Median : 36.00
## Mean :15.4 Mean : 42.98
## 3rd Qu.:19.0 3rd Qu.: 56.00
## Max. :25.0 Max. :120.00
You can also embed plots, for example:
Note that the echo = FALSE parameter was added to the
code chunk to prevent printing of the R code that generated the
plot.
Image Vector
library(magick)
## Linking to ImageMagick 6.9.12.3
## Enabled features: cairo, freetype, fftw, ghostscript, heic, lcms, pango, raw, rsvg, webp
## Disabled features: fontconfig, x11
Contoh ini menyangkut gambar tunggal. Namun semua fungsi dalam sulap telah divektorisasi untuk mendukung bekerja dengan lapisan, komposisi, atau animasi. Metode dasar standar [ [[, c() dan length() digunakan untuk memanipulasi vektor gambar yang kemudian dapat diperlakukan sebagai lapisan atau bingkai
Layers Kita dapat menumpuk lapisan di atas satu sama lain seperti yang kita lakukan di Photoshop:
bigdata <- image_read('https://jeroen.github.io/images/bigdata.jpg')
frink <- image_read("https://jeroen.github.io/images/frink.png")
logo <- image_read("https://jeroen.github.io/images/Rlogo.png")
img <- c(bigdata, logo, frink)
img <- image_scale(img, "300x300")
image_info(img)
## format width height colorspace matte filesize density
## 1 JPEG 300 225 sRGB FALSE 0 72x72
## 2 PNG 300 232 sRGB TRUE 0 72x72
## 3 PNG 148 300 sRGB TRUE 0 72x72
Mosaik mencetak gambar di atas satu sama lain, memperluas kanvas keluaran sedemikian rupa sehingga semuanya pas:
image_mosaic(img)
Perataan menggabungkan lapisan menjadi satu gambar yang memiliki ukuran gambar pertama:
image_flatten(img)
Perataan dan mosaik memungkinkan untuk menentukan operator komposit alternatif:
image_flatten(img, 'Add')
image_flatten(img, 'Modulate')
image_flatten(img, 'Minus')
Mengkombinasikan
Menambahkan berarti hanya menempatkan bingkai di samping satu sama lain:
image_append(image_scale(img, "x200"))
Gunakan stack = TRUE untuk memposisikannya di atas satu sama lain:
image_append(image_scale(img, "100"), stack = TRUE)
Menulis memungkinkan untuk menggabungkan dua gambar pada posisi
tertentu:
bigdatafrink <- image_scale(image_rotate(image_background(frink, "none"), 300), "x200")
image_composite(image_scale(bigdata, "x400"), bigdatafrink, offset = "+180+100")
Pages
Saat membaca dokumen PDF, setiap halaman menjadi elemen vektor. Perhatikan bahwa PDF dirender saat membaca sehingga Anda harus segera menentukan kepadatannya.
manual <- image_read_pdf('https://cloud.r-project.org/web/packages/magick/magick.pdf', density = 72)
image_info(manual)
## format width height colorspace matte filesize density
## 1 PNG 612 792 sRGB TRUE 0 72x72
## 2 PNG 612 792 sRGB TRUE 0 72x72
## 3 PNG 612 792 sRGB TRUE 0 72x72
## 4 PNG 612 792 sRGB TRUE 0 72x72
## 5 PNG 612 792 sRGB TRUE 0 72x72
## 6 PNG 612 792 sRGB TRUE 0 72x72
## 7 PNG 612 792 sRGB TRUE 0 72x72
## 8 PNG 612 792 sRGB TRUE 0 72x72
## 9 PNG 612 792 sRGB TRUE 0 72x72
## 10 PNG 612 792 sRGB TRUE 0 72x72
## 11 PNG 612 792 sRGB TRUE 0 72x72
## 12 PNG 612 792 sRGB TRUE 0 72x72
## 13 PNG 612 792 sRGB TRUE 0 72x72
## 14 PNG 612 792 sRGB TRUE 0 72x72
## 15 PNG 612 792 sRGB TRUE 0 72x72
## 16 PNG 612 792 sRGB TRUE 0 72x72
## 17 PNG 612 792 sRGB TRUE 0 72x72
## 18 PNG 612 792 sRGB TRUE 0 72x72
## 19 PNG 612 792 sRGB TRUE 0 72x72
## 20 PNG 612 792 sRGB TRUE 0 72x72
## 21 PNG 612 792 sRGB TRUE 0 72x72
## 22 PNG 612 792 sRGB TRUE 0 72x72
## 23 PNG 612 792 sRGB TRUE 0 72x72
## 24 PNG 612 792 sRGB TRUE 0 72x72
## 25 PNG 612 792 sRGB TRUE 0 72x72
## 26 PNG 612 792 sRGB TRUE 0 72x72
## 27 PNG 612 792 sRGB TRUE 0 72x72
## 28 PNG 612 792 sRGB TRUE 0 72x72
## 29 PNG 612 792 sRGB TRUE 0 72x72
## 30 PNG 612 792 sRGB TRUE 0 72x72
## 31 PNG 612 792 sRGB TRUE 0 72x72
## 32 PNG 612 792 sRGB TRUE 0 72x72
## 33 PNG 612 792 sRGB TRUE 0 72x72
## 34 PNG 612 792 sRGB TRUE 0 72x72
## 35 PNG 612 792 sRGB TRUE 0 72x72
## 36 PNG 612 792 sRGB TRUE 0 72x72
## 37 PNG 612 792 sRGB TRUE 0 72x72
## 38 PNG 612 792 sRGB TRUE 0 72x72
## 39 PNG 612 792 sRGB TRUE 0 72x72
## 40 PNG 612 792 sRGB TRUE 0 72x72
## 41 PNG 612 792 sRGB TRUE 0 72x72
## 42 PNG 612 792 sRGB TRUE 0 72x72
## 43 PNG 612 792 sRGB TRUE 0 72x72
## 44 PNG 612 792 sRGB TRUE 0 72x72
manual[1]
Animasi
Alih-alih memperlakukan elemen vektor sebagai lapisan, kita juga bisa menjadikannya bingkai dalam animasi!
image_animate(image_scale(img, "200x200"), fps = 1, dispose = "previous")
Morphing membuat urutan n gambar yang secara bertahap mengubah satu gambar menjadi gambar lainnya. Itu membuat animasi
newlogo <- image_scale(image_read("https://jeroen.github.io/images/Rlogo.png"))
oldlogo <- image_scale(image_read("https://jeroen.github.io/images/Rlogo-old.png"))
image_resize(c(oldlogo, newlogo), '200x150!') %>%
image_background('white') %>%
image_morph() %>%
image_animate(optimize = TRUE)
Jika Anda membaca file GIF atau Video yang ada, setiap bingkai menjadi lapisan:
banana <- image_read("https://jeroen.github.io/images/banana.gif")
banana <- image_scale(banana, "150")
image_info(banana)
## format width height colorspace matte filesize density
## 1 GIF 150 148 sRGB TRUE 0 72x72
## 2 GIF 150 148 sRGB TRUE 0 72x72
## 3 GIF 150 148 sRGB TRUE 0 72x72
## 4 GIF 150 148 sRGB TRUE 0 72x72
## 5 GIF 150 148 sRGB TRUE 0 72x72
## 6 GIF 150 148 sRGB TRUE 0 72x72
## 7 GIF 150 148 sRGB TRUE 0 72x72
## 8 GIF 150 148 sRGB TRUE 0 72x72
Memanipulasi masing-masing bingkai dan mengembalikannya ke dalam animasi:
background <- image_background(image_scale(logo, "200"), "white", flatten = TRUE)
# Combine and flatten frames
frames <- image_composite(background, banana, offset = "+70+30")
# Turn frames into animation
animation <- image_animate(frames, fps = 10, optimize = TRUE)
print(animation)
## format width height colorspace matte filesize density
## 1 gif 200 155 sRGB TRUE 0 72x72
## 2 gif 94 105 sRGB TRUE 0 72x72
## 3 gif 125 122 sRGB TRUE 0 72x72
## 4 gif 108 118 sRGB TRUE 0 72x72
## 5 gif 108 105 sRGB TRUE 0 72x72
## 6 gif 92 105 sRGB TRUE 0 72x72
## 7 gif 113 123 sRGB TRUE 0 72x72
## 8 gif 119 118 sRGB TRUE 0 72x72
Animasi dapat disimpan sebagai GIF dari file MPEG:
image_write(animation, "Rlogo-banana.gif")
Gambar dan Grafis
Tambahan yang relatif baru untuk paket ini adalah perangkat grafis R asli yang menghasilkan objek gambar tenung. Ini dapat digunakan seperti perangkat biasa untuk membuat plot, atau sebagai alternatif untuk membuka perangkat yang menarik ke gambar yang ada menggunakan koordinat piksel.
fig <- image_graph(width = 400, height = 400, res = 96)
ggplot2::qplot(mpg, wt, data = mtcars, colour = cyl)
## Warning: `qplot()` was deprecated in ggplot2 3.4.0.
dev.off()
## magick
## 3
Kita dapat dengan mudah melakukan pasca-proses gambar menggunakan operasi gambar biasa.
out <- image_composite(fig, frink, offset = "+70+30")
print(out)
## # A tibble: 1 × 7
## format width height colorspace matte filesize density
## <chr> <int> <int> <chr> <lgl> <int> <chr>
## 1 PNG 400 400 sRGB TRUE 0 96x96
Menggambar Device
Cara lain untuk menggunakan perangkat grafis adalah dengan menggambar di atas gambar yang keluar menggunakan koordinat piksel
img <- image_draw(frink)
rect(20, 20, 200, 100, border = "red", lty = "dashed", lwd = 5)
abline(h = 300, col = 'blue', lwd = '10', lty = "dotted")
text(30, 250, "Hoiven-Glaven", family = "monospace", cex = 4, srt = 90)
palette(rainbow(11, end = 0.9))
symbols(rep(200, 11), seq(0, 400, 40), circles = runif(11, 5, 35),
bg = 1:11, inches = FALSE, add = TRUE)
dev.off()
## png
## 2
print(img)
## # A tibble: 1 × 7
## format width height colorspace matte filesize density
## <chr> <int> <int> <chr> <lgl> <int> <chr>
## 1 PNG 220 445 sRGB TRUE 0 72x72
Secara default image_draw() menyetel semua margin ke 0 dan menggunakan koordinat grafik untuk mencocokkan ukuran gambar dalam piksel (lebar x tinggi) dengan (0,0) adalah sudut kiri atas. Perhatikan bahwa ini berarti sumbu y bertambah dari atas ke bawah yang merupakan kebalikan dari koordinat grafis pada umumnya. Anda dapat mengganti semua ini dengan meneruskan nilai xlim, ylim, atau mar khusus ke image_draw.
Grafis yang teranimasikan
Perangkat grafis mendukung banyak bingkai yang membuatnya mudah untuk membuat grafik animasi. Kode di bawah ini menunjukkan bagaimana Anda akan mengimplementasikan contoh dari paket gganimate yang sangat keren menggunakan perangkat grafis magick.
library(gapminder)
## Warning: package 'gapminder' was built under R version 4.2.3
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.2.3
img <- image_graph(600, 340, res = 96)
datalist <- split(gapminder, gapminder$year)
out <- lapply(datalist, function(data){
p <- ggplot(data, aes(gdpPercap, lifeExp, size = pop, color = continent)) +
scale_size("population", limits = range(gapminder$pop)) + geom_point() + ylim(20, 90) +
scale_x_log10(limits = range(gapminder$gdpPercap)) + ggtitle(data$year) + theme_classic()
print(p)
})
dev.off()
## png
## 2
animation <- image_animate(img, fps = 2, optimize = TRUE)
print(animation)
## # A tibble: 12 × 7
## format width height colorspace matte filesize density
## <chr> <int> <int> <chr> <lgl> <int> <chr>
## 1 gif 600 340 sRGB TRUE 0 96x96
## 2 gif 385 243 sRGB TRUE 0 96x96
## 3 gif 395 237 sRGB TRUE 0 96x96
## 4 gif 374 232 sRGB TRUE 0 96x96
## 5 gif 393 225 sRGB TRUE 0 96x96
## 6 gif 373 234 sRGB TRUE 0 96x96
## 7 gif 354 234 sRGB TRUE 0 96x96
## 8 gif 308 210 sRGB TRUE 0 96x96
## 9 gif 320 260 sRGB TRUE 0 96x96
## 10 gif 331 218 sRGB TRUE 0 96x96
## 11 gif 356 208 sRGB TRUE 0 96x96
## 12 gif 347 208 sRGB TRUE 0 96x96
Untuk menulisnya ke file, Anda cukup melakukannya:
image_write(animation, "gapminder.gif")
Gambar Raster
Gambar magick juga dapat dikonversi menjadi objek raster untuk digunakan dengan perangkat grafis R. Dengan demikian kita dapat menggabungkannya dengan alat grafis lainnya. Namun harap diperhatikan bahwa perangkat grafis R sangat lambat dan memiliki sistem koordinat yang sangat berbeda yang mengurangi kualitas gambar.
Dasar R Raster
Base R memiliki format as.raster yang mengubah gambar menjadi vektor string. Makalah Raster Images in R Graphics oleh Paul Murrell memberikan gambaran umum yang bagus.
plot(as.raster(frink))
plot(cars)
rasterImage(frink, 21, 0, 25, 80)
Package Grid
Paket grid mempermudah overlay raster pada perangkat grafis tanpa harus menyesuaikan koordinat x/y dari plot.
library(ggplot2)
library(grid)
qplot(speed, dist, data = cars, geom = c("point", "smooth"))
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
grid.raster(frink)
Ekstraksi Teks OCR
Tambahan terbaru untuk paket ini adalah mengekstraksi teks dari gambar menggunakan OCR. Ini membutuhkan paket tesseract:
library("tesseract")
img <- image_read("http://jeroen.github.io/images/testocr.png")
print(img)
## # A tibble: 1 × 7
## format width height colorspace matte filesize density
## <chr> <int> <int> <chr> <lgl> <int> <chr>
## 1 PNG 640 480 sRGB TRUE 23359 72x72
cat(image_ocr(img))
## This is a lot of 12 point text to test the
## ocr code and see if it works on all types
## of file format.
##
## The quick brown dog jumped over the
## lazy fox. The quick brown dog jumped
## over the lazy fox. The quick brown dog
## jumped over the lazy fox. The quick
## brown dog jumped over the lazy fox.