57 lines
1.7 KiB
Rust
57 lines
1.7 KiB
Rust
|
|
use photon_rs::{
|
||
|
|
PhotonImage, multiple::watermark, native::open_image, native::save_image, transform::resize,
|
||
|
|
};
|
||
|
|
|
||
|
|
fn main() {
|
||
|
|
let base_path = "/mnt/c/Users/Formulatrix/Documents/Explorations/WebApplication1/tiles1705/";
|
||
|
|
const SCALE: f64 = 0.01;
|
||
|
|
const SIZE: u32 = 720;
|
||
|
|
let actual_size = (SIZE as f64 * SCALE).trunc() as u32;
|
||
|
|
|
||
|
|
// Open the image (a PhotonImage is returned)
|
||
|
|
let max_col = 31;
|
||
|
|
let max_row = 55;
|
||
|
|
let mut res = new_empty_image(actual_size * max_row, actual_size * max_col);
|
||
|
|
for i in 1..=max_col {
|
||
|
|
for j in 1..=max_row {
|
||
|
|
let filename = format!("{}{}{}.png", base_path, number_to_column(i), j);
|
||
|
|
// println!("{filename}");
|
||
|
|
|
||
|
|
let pre = open_image(filename).expect("File should open");
|
||
|
|
let img = resize(
|
||
|
|
&pre,
|
||
|
|
actual_size,
|
||
|
|
actual_size,
|
||
|
|
photon_rs::transform::SamplingFilter::Nearest,
|
||
|
|
);
|
||
|
|
watermark(
|
||
|
|
&mut res,
|
||
|
|
&img,
|
||
|
|
actual_size as i64 * j as i64,
|
||
|
|
actual_size as i64 * i as i64,
|
||
|
|
);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// Apply a sepia effect to the image.
|
||
|
|
save_image(res, "raw_image.png").expect("File should be saved");
|
||
|
|
}
|
||
|
|
pub fn new_empty_image(width: u32, height: u32) -> PhotonImage {
|
||
|
|
// 4 bytes per pixel (RGBA)
|
||
|
|
let num_pixels = (width * height * 4) as usize;
|
||
|
|
let raw_pixels = vec![0u8; num_pixels];
|
||
|
|
PhotonImage::new(raw_pixels, width, height)
|
||
|
|
}
|
||
|
|
fn number_to_column(mut num: u32) -> String {
|
||
|
|
let mut result = String::new();
|
||
|
|
|
||
|
|
while num > 0 {
|
||
|
|
num -= 1;
|
||
|
|
let ch = ((num % 26) as u8 + b'A') as char;
|
||
|
|
result.insert(0, ch);
|
||
|
|
num /= 26;
|
||
|
|
}
|
||
|
|
|
||
|
|
result
|
||
|
|
}
|