Added displaying of an image, add conversion

This commit is contained in:
Robin Löhn 2025-10-07 18:59:06 +02:00
parent 4361508419
commit 80f9037f42
Signed by: robin
GPG key ID: 4F5CDA3F9635EB10
3 changed files with 27 additions and 15 deletions

BIN
src/cache/img_name.webp vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

14
src/image.rs Normal file
View file

@ -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();
}

View file

@ -1,5 +1,4 @@
use eframe::egui; use eframe::egui;
use eframe::egui::ImageSource;
use log::*; use log::*;
use reqwest::Client; use reqwest::Client;
use serde::Deserialize; use serde::Deserialize;
@ -11,6 +10,7 @@ use std::time::Duration;
use std::{env, fs}; use std::{env, fs};
use tokio; use tokio;
use tokio::runtime::Runtime; use tokio::runtime::Runtime;
pub mod image;
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
struct BookData { 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 runtime = Runtime::new().unwrap();
let url = if url.is_empty() { 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 { } else {
url url
}; };
debug!("The isbn of the img is: {isbn}");
let isbn = isbn.trim().to_string();
fs::create_dir_all("cache").unwrap(); 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 image = runtime.block_on(reqwest::get(url)).unwrap();
let bytes = runtime.block_on(image.bytes()).unwrap(); let bytes = runtime.block_on(image.bytes()).unwrap();
let mut output = Cursor::new(bytes); let mut output = Cursor::new(bytes);
copy(&mut output, &mut dest).unwrap(); copy(&mut output, &mut dest).unwrap();
image::convert_to_webp(isbn);
} }
#[derive(Default)] #[derive(Default)]
@ -175,6 +177,7 @@ struct BarcodeScanner {}
impl eframe::App for BarcodeScanner { impl eframe::App for BarcodeScanner {
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) -> () { fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) -> () {
egui_extras::install_image_loaders(ctx); egui_extras::install_image_loaders(ctx);
egui::CentralPanel::default().show(ctx, |ui| { egui::CentralPanel::default().show(ctx, |ui| {
ui.heading("Barcode Scanner"); ui.heading("Barcode Scanner");
ui.group(|ui| { ui.group(|ui| {
@ -182,22 +185,17 @@ impl eframe::App for BarcodeScanner {
let barcode = get_ean13_data(); let barcode = get_ean13_data();
ui.label(format!("EAN13: {}", barcode)); ui.label(format!("EAN13: {}", barcode));
let book_metadata = if barcode.starts_with("978") { let book_metadata = if barcode.starts_with("978") {
get_book_data(barcode) get_book_data(barcode.clone())
} else { } else {
BookData::new() 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!("Title: {}", book_metadata.title));
ui.label(format!("Description: {}", book_metadata.description)); ui.label(format!("Description: {}", book_metadata.description));
ui.label(format!("Authors: {:?}", book_metadata.authors)); ui.label(format!("Authors: {:?}", book_metadata.authors));
if !book_metadata.thumbnail.is_empty() { ui.image(egui::include_image!("cache/img_name.webp"))
ui.image(egui::ImageSource::Uri(book_metadata.thumbnail.into())) .on_hover_text_at_pointer("WebP");
} else { //}
ui.image(egui::ImageSource::Uri(std::borrow::Cow::Borrowed(
"https://www.rust-lang.org/logos/rust-logo-512x512.png",
)))
}
// }
}) })
}); });
} }