отказ от ответственности: я работаю на 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 общеизвестно строг.