reading exif-proof of concept.
This commit is contained in:
parent
13bc6a165e
commit
e493d37860
25
.gitignore
vendored
25
.gitignore
vendored
@ -15,27 +15,7 @@ Cargo.lock
|
||||
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
|
||||
|
||||
# User-specific stuff
|
||||
.idea/**/workspace.xml
|
||||
.idea/**/tasks.xml
|
||||
.idea/**/usage.statistics.xml
|
||||
.idea/**/dictionaries
|
||||
.idea/**/shelf
|
||||
|
||||
# Generated files
|
||||
.idea/**/contentModel.xml
|
||||
|
||||
# Sensitive or high-churn files
|
||||
.idea/**/dataSources/
|
||||
.idea/**/dataSources.ids
|
||||
.idea/**/dataSources.local.xml
|
||||
.idea/**/sqlDataSources.xml
|
||||
.idea/**/dynamic.xml
|
||||
.idea/**/uiDesigner.xml
|
||||
.idea/**/dbnavigator.xml
|
||||
|
||||
# Gradle
|
||||
.idea/**/gradle.xml
|
||||
.idea/**/libraries
|
||||
.idea/
|
||||
|
||||
# Gradle and Maven with auto-import
|
||||
# When using Gradle or Maven with auto-import, you should exclude module files,
|
||||
@ -53,9 +33,6 @@ Cargo.lock
|
||||
# CMake
|
||||
cmake-build-*/
|
||||
|
||||
# Mongo Explorer plugin
|
||||
.idea/**/mongoSettings.xml
|
||||
|
||||
# File-based project format
|
||||
*.iws
|
||||
|
||||
|
BIN
BlueSquare.jpg
Normal file
BIN
BlueSquare.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 24 KiB |
BIN
Canon_40D.jpg
Normal file
BIN
Canon_40D.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.8 KiB |
15
Cargo.toml
Normal file
15
Cargo.toml
Normal file
@ -0,0 +1,15 @@
|
||||
[package]
|
||||
name = "curators"
|
||||
version = "0.1.0"
|
||||
authors = ["Micha Glave <mig@xilab.net>"]
|
||||
edition = "2018"
|
||||
exclude = [".travis.yml", ".gitignore", "test-data/**"]
|
||||
description = "Image Gallery. Defined by plain files."
|
||||
|
||||
[dependencies]
|
||||
toml = "0.5"
|
||||
structopt = "0.3"
|
||||
#exempi = "2.5.0"
|
||||
strum = "0.18.0"
|
||||
strum_macros = "0.18.0"
|
||||
kamadak-exif = "0.5"
|
@ -1,3 +1,10 @@
|
||||
# curators
|
||||
|
||||
Image Gallery. Defined by plain files.
|
||||
|
||||
## Goal:
|
||||
Image management for multiple (competing) users. Purely file-based, non-destructive, based on standards (as much as possible). Using
|
||||
|
||||
* [Exif](https://de.wikipedia.org/wiki/Exchangeable_Image_File_Format)
|
||||
* [IPTC](https://de.wikipedia.org/wiki/IPTC-IIM-Standard)
|
||||
* [XMP](https://de.wikipedia.org/wiki/Extensible_Metadata_Platform)
|
||||
|
51
src/main.rs
Normal file
51
src/main.rs
Normal file
@ -0,0 +1,51 @@
|
||||
extern crate strum;
|
||||
|
||||
use structopt::StructOpt;
|
||||
use strum_macros::EnumString;
|
||||
|
||||
#[derive(EnumString, Debug)]
|
||||
enum Cmd {
|
||||
#[strum(serialize = "read", serialize = "r")]
|
||||
Read,
|
||||
#[strum(
|
||||
serialize = "write",
|
||||
serialize = "w",
|
||||
serialize = "set",
|
||||
serialize = "s"
|
||||
)]
|
||||
Write,
|
||||
}
|
||||
|
||||
#[derive(Debug, StructOpt)]
|
||||
#[structopt(name = "curators", about = "An image meta-data handling tool.")]
|
||||
struct Opt {
|
||||
/// image-file to work with.
|
||||
image_file: String,
|
||||
|
||||
/// operation
|
||||
cmd: Option<Cmd>,
|
||||
|
||||
/// Property to handle.
|
||||
property: Option<String>,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let opt = Opt::from_args();
|
||||
println!("{:?}", opt);
|
||||
|
||||
match std::fs::File::open(&opt.image_file) {
|
||||
Ok(file) => {
|
||||
let mut bufreader = std::io::BufReader::new(&file);
|
||||
let exifreader = exif::Reader::new();
|
||||
match exifreader.read_from_container(&mut bufreader) {
|
||||
Ok(exif) => {
|
||||
for f in exif.fields() {
|
||||
println!("{}: {}", f.tag, f.display_value().with_unit(&exif));
|
||||
}
|
||||
}
|
||||
Err(e) => println!("{:?}", e),
|
||||
}
|
||||
}
|
||||
Err(e) => println!("{:?}", e),
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user