면책 조항 : 저는 Atalasoft으로 근무하며 .NET을 통해 이미지 작업용 제품을 만듭니다.
당신이이 같은 코드로 TiffDocument 클래스를 사용 dotImage입니다 수행 할 수 있습니다
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);
}
}
장점은 여러 가지입니다 - 태그에 직접 접근이 이미지를 재 인코딩없이 일 당신이 원하는 방식을 설정할 수 있습니다 . 초기 이미지가 TIFF 내에서 JPEG로 압축 된 경우 JPEG 데이터를 다시 인코딩하고 정보를 잃어 버릴 염려가 없습니다. 또한 이미 있던 TIFF 태그 정보를 잃어 버릴 염려가 없습니다. 이 코드는 다중 페이지 TIFF에서도 작동합니다. 마지막으로 태그를 변경하기 위해 전체 이미지를 디코딩하는 것보다 빠른 접근 방법 일 것입니다.
이 접근법의 단점은 정말, 정말, TIFF 사양을 이해해야한다는 것입니다. 이러한 이해가 없으면 항상 파싱 할 수없는 파일을 생성 할 위험이 있습니다. 예를 들어 DotImage와 IrfanView는 모든 방식의 깨진 TIFF를 사용하는 데 매우 관대합니다. Adobe PhotoShop은 악명 높게 엄격합니다.
나는'SetResolution를 (사용하여 시도)'하지만 여전히 기쁨 :( –