mirror of
https://github.com/lifegpc/pixiv_downloader.git
synced 2026-07-08 01:32:41 +08:00
add more exif keys to image
This commit is contained in:
@@ -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(())
|
||||
|
||||
@@ -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:"),
|
||||
|
||||
Reference in New Issue
Block a user