Last active
June 1, 2022 13:35
-
-
Save debruine/90d540aea1148a1ea3b14cce2b6c3345 to your computer and use it in GitHub Desktop.
Create a progressive pride flag with code
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# colors via https://twitter.com/dataandme/status/1531946768270860288 | |
pride <- c( | |
red = '#E50000', | |
orange = '#FF8D00', | |
yellow = '#FFEE00', | |
green = '#028121', | |
blue = '#004CFF', | |
purple = '#760088', | |
black = '#000000', | |
brown = '#613915', | |
aqua = '#73D7EE', | |
pink = '#FFAFC7', | |
white = '#FFFFFF' | |
) | |
################################################ | |
## USING webmorphR (magick-only code below) ---- | |
################################################ | |
# devtools::install_github("debruine/webmorphR") | |
library(webmorphR) | |
wm_opts(fill = "none") | |
stripes <- blank(6, width = 500, height = 50, color = pride[1:6]) |> | |
plot(nrow = 6, padding = 0) | |
corner <- blank(1, 200, 200, color = pride["white"]) |> | |
pad(50, fill = pride["pink"]) |> | |
pad(50, fill = pride["aqua"]) |> | |
pad(50, fill = pride["brown"]) |> | |
pad(50, fill = pride["black"]) |> | |
rotate(degrees = 45, | |
keep_size = FALSE) |> | |
crop(width = 0.5, height = 2/3, | |
x_off = 0.5, y_off = 1/6) |> | |
resize(height = height(stripes)) | |
flag <- image_func(stripes, "composite", corner$img$img) | |
plot(flag) # view image | |
# write to disk | |
write_stim(flag, names = "prog_pride.png") | |
################################################ | |
## Using magick-only ---- | |
################################################ | |
library(magick) | |
stripes <- sapply(pride[1:6], | |
image_blank, | |
width = 500, height = 50) |> | |
do.call(what = c) |> | |
image_append(stack = TRUE) | |
square_corner <- mapply(image_blank, | |
width = seq(600, 200, -100), | |
height = seq(600, 200, -100), | |
color = pride[7:11]) |> | |
do.call(what = c) | |
rot_corner <- square_corner[1] |> | |
image_composite(square_corner[2], offset = "+50+50") |> | |
image_composite(square_corner[3], offset = "+100+100") |> | |
image_composite(square_corner[4], offset = "+150+150") |> | |
image_composite(square_corner[5], offset = "+200+200") |> | |
image_background(color = "none", flatten = FALSE) |> | |
image_rotate(45) |> | |
image_repage() | |
# calculate some geometry to crop the corner | |
info <- image_info(rot_corner) | |
ga <- geometry_area(width = info$width / 2, | |
height = info$height*2/3, | |
x_off = info$width / 2, | |
y_off = info$height / 6) | |
pcnt <- geometry_size_percent(100 * 300 / (info$height*2/3)) | |
corner <- image_crop(rot_corner, ga, repage = TRUE) |> | |
image_resize(geometry = pcnt) | |
# superimpose | |
flag <- image_composite(stripes, corner) | |
plot(flag) # view image | |
# write to disk | |
image_write(flag, "flag.png") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment