отказ от ответственности: я работаю для Atalasoft, что делает продукты для работы с изображениями через .NET.
Вы можете сделать это dotImage используя класс TiffDocument с кодом, как это:
private void RemoveIfContains(TiffTagCollection tags, int tagID)
{
TiffTag tag = tags.LookupTag(tagID);
if (tag != null)
tags.Remove(tag);
}
public void SetTiffResolution(string tiffin, string tiffout, int page, double resolution) {
if (tiffin == tiffout)
throw new ArgumentException(tiffout, "output path must be different from input path");
TiffFile tf = new TiffFile();
using (FileStream stm = new FileStream(tiffin, FileMode.Open, FileAccess.Read, FileShare.Read)) {
tf.Read(stm);
TiffDirectory image = tf.Images[page];
RemoveIfContains(image.Tags, TiffTagID.ResolutionX);
RemoveIfContains(image.Tags, TiffTagID.ResolutionY);
RemoveIfContains(image.Tags, TiffTagID.ResolutionUnit);
image.Tags.Add(new TiffTag(TiffTagID.ResolutionX, resolution);
image.Tags.Add(new TiffTag(TiffTagID.ResolutionY, resolution);
image.Tags.Add(new TiffTag(TiffTagID.ResolutionUnit, 2)); // 2 == dots per INCH
tf.Save(tiffout);
}
}
Преимущество несколько - прямой доступ к тегам позволяет установить вещи так, как вы хотите без повторного кодирования изображения , Если ваше исходное изображение было сжато с помощью JPEG внутри TIFF, вам не нужно беспокоиться о проблемах с повторным кодированием данных JPEG и потерей информации. Кроме того, вам не нужно беспокоиться о потере информации тегов TIFF, которая уже была там. Этот код также работает с многостраничными TIFF. Наконец, это, вероятно, будет более быстрый подход, чем декодирование всего изображения, только для изменения тега.
Недостатком такого подхода является то, что вам действительно нужно понять спецификацию TIFF. Без этого понимания вы рискуете создавать файлы, которые могут не всегда обрабатываться. Например, DotImage и IrfanView очень мягко потребляют всевозможные сломанные TIFF. Adobe PhotoShop, как известно, является строгим.
Я попытался с помощью 'SetResolution()', но до сих пор нет радости :( –