use std::fs::create_dir_all; use image::imageops::{rotate180, rotate270, rotate90}; use image::{GenericImage, RgbaImage}; fn superpose(image: &RgbaImage, superposition: &RgbaImage) -> RgbaImage { let mut clone = image.clone(); for i in 0..image.width() { for j in 0..image.height() { let new_pixel = superposition.get_pixel(i, j); if new_pixel[3] > 0 { *clone.get_pixel_mut(i, j) = *new_pixel; } } } clone } fn main() { create_dir_all("assets/textures-generated").unwrap(); let mut texture = image::open("assets/textures/grass.png").unwrap().to_rgba(); let background = texture.sub_image(0, 0, 32, 32).to_image(); let border = texture.sub_image(32, 0, 32, 32).to_image(); let corner_horiz = texture.sub_image(32 * 2, 0, 32, 32).to_image(); let corner_vert = texture.sub_image(32 * 3, 0, 32, 32).to_image(); let corner_inside = texture.sub_image(32 * 4, 0, 32, 32).to_image(); let corner_outside = texture.sub_image(32 * 5, 0, 32, 32).to_image(); let mut background_color = texture.sub_image(32 * 6, 0, 32, 32); let background_color = background_color.get_pixel_mut(0, 0); let mut vec = vec![]; let image_0 = background.clone(); vec.push(&image_0); let image_1 = corner_outside.clone(); vec.push(&image_1); let image_4 = rotate90(&corner_outside); vec.push(&image_4); let image_5 = superpose(&image_1, &image_4); vec.push(&image_5); let image_7 = superpose(&superpose(&corner_horiz, &border), &rotate90(&corner_vert)); vec.push(&image_7); let image_16 = rotate90(&rotate90(&corner_outside)); vec.push(&image_16); let image_17 = superpose(&image_16, &corner_outside); vec.push(&image_17); let image_20 = superpose(&rotate90(&corner_outside), &rotate180(&corner_outside)); vec.push(&image_20); let image_21 = superpose(&image_20, &corner_outside); vec.push(&image_21); let image_23 = superpose(&image_7, &image_16); vec.push(&image_23); let image_28 = rotate90(&image_7); vec.push(&image_28); let image_29 = superpose(&image_1, &image_28); vec.push(&image_29); let image_31 = superpose( &superpose( &border, &superpose(&rotate90(&border), &rotate90(&corner_inside)), ), &corner_horiz, ); let image_31 = superpose(&image_31, &rotate180(&corner_vert)); vec.push(&image_31); let image_64 = rotate270(&image_1); vec.push(&image_64); let image_65 = superpose(&image_1, &image_64); vec.push(&image_65); let image_68 = superpose(&image_4, &image_64); vec.push(&image_68); let image_69 = superpose(&image_1, &image_68); vec.push(&image_69); let image_71 = superpose(&image_7, &image_64); vec.push(&image_71); let image_80 = superpose(&image_16, &image_64); vec.push(&image_80); let image_81 = superpose(&image_1, &image_80); vec.push(&image_81); let image_84 = superpose(&image_4, &image_80); vec.push(&image_84); let image_85 = superpose(&image_1, &image_84); vec.push(&image_85); let image_87 = superpose(&image_7, &image_80); vec.push(&image_87); let image_92 = superpose(&image_28, &image_64); vec.push(&image_92); let image_93 = superpose(&image_1, &image_92); vec.push(&image_93); let image_95 = superpose(&image_31, &image_64); vec.push(&image_95); let image_112 = rotate180(&image_7); vec.push(&image_112); let image_113 = superpose(&image_1, &image_112); vec.push(&image_113); let image_116 = superpose(&image_4, &image_112); vec.push(&image_116); let image_117 = superpose(&image_1, &image_116); vec.push(&image_117); let image_119 = superpose(&image_7, &image_112); vec.push(&image_119); let image_124 = rotate90(&image_31); vec.push(&image_124); let image_125 = superpose(&image_1, &image_124); vec.push(&image_125); let image_127 = superpose( &superpose( &border, &superpose(&rotate90(&border), &rotate90(&corner_inside)), ), &corner_horiz, ); let image_127 = superpose( &superpose(&image_127, &rotate180(&corner_inside)), &rotate180(&border), ); let image_127 = superpose(&image_127, &rotate270(&corner_vert)); vec.push(&image_127); let image_193 = rotate270(&image_7); vec.push(&image_193); let image_197 = superpose(&image_4, &image_193); vec.push(&image_197); let image_199 = rotate270(&image_31); vec.push(&image_199); let image_209 = rotate90(&image_116); vec.push(&image_209); let image_213 = rotate90(&image_117); vec.push(&image_213); let image_215 = rotate180(&image_125); vec.push(&image_215); let image_221 = rotate90(&image_119); vec.push(&image_221); let image_223 = rotate270(&image_127); vec.push(&image_223); let image_241 = rotate90(&image_124); vec.push(&image_241); let image_245 = rotate270(&image_215); vec.push(&image_245); let image_247 = rotate270(&image_223); vec.push(&image_247); let image_253 = rotate180(&image_223); vec.push(&image_253); let image_255 = superpose( &border, &superpose( &rotate90(&border), &superpose(&rotate180(&border), &rotate270(&border)), ), ); let image_255 = superpose(&image_255, &corner_inside); let image_255 = superpose(&image_255, &rotate90(&corner_inside)); let image_255 = superpose(&image_255, &rotate180(&corner_inside)); let image_255 = superpose(&image_255, &rotate270(&corner_inside)); vec.push(&image_255); let mut output = RgbaImage::new(32 * 47, 32); for (index, image) in vec.into_iter().enumerate() { for y in 0..image.width() { for x in 0..image.height() { let new_pixel = image.get_pixel(x, y); if new_pixel != background_color { *output.get_pixel_mut(x + 32 * index as u32, y) = *background.get_pixel(x, y); if new_pixel[3] > 0 { *output.get_pixel_mut(x + 32 * index as u32, y) = *new_pixel; } } } } } output.save("assets/textures-generated/grass.png").unwrap(); }