add more exif keys to image

This commit is contained in:
2022-03-03 16:30:22 +08:00
parent 2b7542cdeb
commit e408e26430
2 changed files with 20 additions and 3 deletions

View File

@@ -1,4 +1,5 @@
use crate::data::data::PixivData;
use crate::exif::ExifByteOrder;
use crate::exif::ExifData;
use crate::exif::ExifImage;
use crate::exif::ExifKey;
@@ -46,6 +47,10 @@ fn add_image_author(data: &mut ExifData, d: &PixivData) -> Result<(), ()> {
let s: WString<LittleEndian> = WString::from(author);
value.read(s.as_bytes(), None)?;
data.add(&key, &value)?;
let key = ExifKey::try_from("Exif.Image.Artist")?;
let mut value = ExifValue::try_from(ExifTypeID::AsciiString)?;
value.read(author.as_bytes(), None)?;
data.add(&key, &value)?;
Ok(())
}
@@ -67,13 +72,22 @@ fn add_image_comment(data: &mut ExifData, d: &PixivData) -> Result<(), ()> {
Ok(())
}
pub fn add_exifdata_to_image<S: AsRef<OsStr> + ?Sized>(file_name: &S, data: &PixivData) -> Result<(), ()> {
fn add_image_page(data: &mut ExifData, page: u16) -> Result<(), ()> {
let key = ExifKey::try_from("Exif.Image.PageNumber")?;
let mut value = ExifValue::try_from(ExifTypeID::UShort)?;
value.read(&page.to_le_bytes(), Some(ExifByteOrder::Little))?;
data.add(&key, &value)?;
Ok(())
}
pub fn add_exifdata_to_image<S: AsRef<OsStr> + ?Sized>(file_name: &S, data: &PixivData, page: u16) -> Result<(), ()> {
let mut f = ExifImage::new(file_name)?;
let mut d = ExifData::new()?;
add_image_id(&mut d, data)?;
add_image_title(&mut d, data)?;
add_image_author(&mut d, data)?;
add_image_comment(&mut d, data)?;
add_image_page(&mut d, page)?;
f.set_exif_data(&d)?;
f.write_metadata()?;
Ok(())

View File

@@ -68,6 +68,8 @@ impl Main {
return 1;
}
if pages_data.is_some() {
#[cfg(feature = "exif")]
let mut np = 0u16;
let pages_data = pages_data.as_ref().unwrap();
for page in pages_data.members() {
let link = &page["urls"]["original"];
@@ -102,13 +104,14 @@ impl Main {
);
#[cfg(feature = "exif")]
{
if add_exifdata_to_image(&file_name, &datas).is_err() {
if add_exifdata_to_image(&file_name, &datas, np).is_err() {
println!(
"{} {}",
gettext("Failed to add exif data to image:"),
file_name.to_str().unwrap_or("(null)")
);
}
np += 1;
}
}
} else {
@@ -144,7 +147,7 @@ impl Main {
);
#[cfg(feature = "exif")]
{
if add_exifdata_to_image(&file_name, &datas).is_err() {
if add_exifdata_to_image(&file_name, &datas, 0).is_err() {
println!(
"{} {}",
gettext("Failed to add exif data to image:"),