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::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");
//}
})
});
}