4

Weekly Rust Trivia: How to Retrieve Image Dimensions

 1 year ago
source link: https://www.thorsten-hans.com/weekly-rust-trivia-retrieve-image-dimensions/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Weekly Rust Trivia: How to Retrieve Image Dimensions

Published Thu, Jun 22, 2023 / by Thorsten Hans / Estimated reading time: 2 min

Rust  / Weekly Rust Trivia

Weekly Rust Trivia is a problem-oriented series of articles that assist developers while learning Rust. Every article solves simple, everyday development tasks using the Rust standard library or leveraging popular and proven crates.

Question: How to retrieve the dimensions of an image in Rust?

The image crate provides necessary functionality to work with images in Rust. We can combine functionality provided by the crate with the path module from Rusts standard library to solve this trivia. We also use the anyhow crate, to streamline error handling.

First let’s add the following dependencies using cargo add:

# Add anyhow as dependency
cargo add anyhow
# Add the csv crate as dependency
cargo add image

Having the crates added to our project, we can move on and implement inspecting an image to get its dimensions:

use std::path::{Path};
use anyhow::Result;
use image::io::Reader;

fn get_image_dimensions(file_path: &str) -> Result<(u32, u32)> {
    let path = Path::new(file_path);
    let reader = Reader::open(path)?;
    let dimensions = reader.into_dimensions()?;
    Ok(dimensions)
}

The get_image_dimensions function takes a file path as an argument and returns a tuple of the image dimensions in the form of (u32, u32).

It first creates a Path object from the provided file path. It then uses the Reader type from the image crate to read the image file at the provided path. The function then calls the into_dimensions() method on the reader to get the dimensions of the image. If the operation is successful, it returns the dimensions in a tuple wrapped in a Result with the Ok variant. If there is an error, the function will return a Result with the Err variant.

We can call the get_image_dimensions method like shown here:

fn main() {
    match get_image_dimensions("data/sample.jpg") {
        Ok((width, height)) => println!("dimensions: {} x {}", width, height),
        Err(e) => println!("error: {}", e),
    }
}

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK