From 80f9037f42abf5e8fc1fe24cfb4cc28eb242e9aa Mon Sep 17 00:00:00 2001 From: Shadowbee Date: Tue, 7 Oct 2025 18:59:06 +0200 Subject: [PATCH] Added displaying of an image, add conversion --- src/cache/img_name.webp | Bin 0 -> 33632 bytes src/image.rs | 14 ++++++++++++++ src/main.rs | 28 +++++++++++++--------------- 3 files changed, 27 insertions(+), 15 deletions(-) create mode 100644 src/cache/img_name.webp create mode 100644 src/image.rs diff --git a/src/cache/img_name.webp b/src/cache/img_name.webp new file mode 100644 index 0000000000000000000000000000000000000000..bd6fe8ec5e2b214d9160e68e27dfad18d033586e GIT binary patch literal 33632 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 DC#zz! literal 0 HcmV?d00001 diff --git a/src/image.rs b/src/image.rs new file mode 100644 index 0000000..a6c1502 --- /dev/null +++ b/src/image.rs @@ -0,0 +1,14 @@ +use image::ImageFormat; +use image::ImageReader; +use log::debug; + +pub fn convert_to_webp(img_name: String) { + debug!("The img_name is: {img_name}"); + let img = ImageReader::open(format!("cache/{img_name}.jpeg")) + .unwrap() + .decode() + .unwrap(); + img + .save_with_format(format!("src/cache/img_name.webp"), ImageFormat::WebP) + .unwrap(); +} diff --git a/src/main.rs b/src/main.rs index 9746e39..b534aaa 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,4 @@ use eframe::egui; -use eframe::egui::ImageSource; use log::*; use reqwest::Client; use serde::Deserialize; @@ -11,6 +10,7 @@ use std::time::Duration; use std::{env, fs}; use tokio; use tokio::runtime::Runtime; +pub mod image; #[derive(Debug, Clone)] struct BookData { @@ -153,20 +153,22 @@ impl std::fmt::Display for BookData { ) } } -fn get_thumbnail(url: String) { +fn get_thumbnail(url: String, isbn: String) { let runtime = Runtime::new().unwrap(); let url = if url.is_empty() { - "https://www.rust-lang.org/logos/rust-logo-512x512.png".to_string() + "https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Ftse1.mm.bing.net%2Fth%2Fid%2FOIP.pluN_8e5GuVyqRmW8xWs1gHaET%3Fcb%3D12%26pid%3DApi&f=1&ipt=bf48e49e5df83d58cdee7752f4e2095f5b0ad37e5122d447ff774631db3de4a9&ipo=images".to_string() } else { url }; - + debug!("The isbn of the img is: {isbn}"); + let isbn = isbn.trim().to_string(); fs::create_dir_all("cache").unwrap(); - let mut dest = File::create("cache/image.jpeg").unwrap(); + let mut dest = File::create(format!("cache/{isbn}.jpeg")).unwrap(); let image = runtime.block_on(reqwest::get(url)).unwrap(); let bytes = runtime.block_on(image.bytes()).unwrap(); let mut output = Cursor::new(bytes); copy(&mut output, &mut dest).unwrap(); + image::convert_to_webp(isbn); } #[derive(Default)] @@ -175,6 +177,7 @@ struct BarcodeScanner {} impl eframe::App for BarcodeScanner { fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) -> () { egui_extras::install_image_loaders(ctx); + egui::CentralPanel::default().show(ctx, |ui| { ui.heading("Barcode Scanner"); ui.group(|ui| { @@ -182,22 +185,17 @@ impl eframe::App for BarcodeScanner { let barcode = get_ean13_data(); ui.label(format!("EAN13: {}", barcode)); let book_metadata = if barcode.starts_with("978") { - get_book_data(barcode) + get_book_data(barcode.clone()) } else { BookData::new() }; - get_thumbnail(book_metadata.thumbnail.clone()); + get_thumbnail(book_metadata.thumbnail.clone(), barcode); ui.label(format!("Title: {}", book_metadata.title)); ui.label(format!("Description: {}", book_metadata.description)); ui.label(format!("Authors: {:?}", book_metadata.authors)); - if !book_metadata.thumbnail.is_empty() { - ui.image(egui::ImageSource::Uri(book_metadata.thumbnail.into())) - } else { - ui.image(egui::ImageSource::Uri(std::borrow::Cow::Borrowed( - "https://www.rust-lang.org/logos/rust-logo-512x512.png", - ))) - } - // } + ui.image(egui::include_image!("cache/img_name.webp")) + .on_hover_text_at_pointer("WebP"); + //} }) }); }