C# Tif格式转Jpg
首先,关于啥是Tif(TIFF)格式,就让鄙人来解释解释吧…内个啥,还是让度娘来吧。TIFF格式
接下来,让我捡个狗屎给大家舔一舔吧(不听故事的请跳过这一段,直接看代码)。上一个Web项目中,很寻常的使用了报表打印功能(MIS系统嘛,这很正常),项目顺利,寻常。后来有一天客户突然跟我说要加个报表生成图片的功能,原因是客户居然拿着手机在玩这个系统(本来想哪天需要搞个APP的时候再赚一笔的,好吧,我认了)。于是乎,我就帮客户做了导出图片的功能,其实也简单,使用报表工具直接导出就可以了。报表一般是支持导出Excel、PDF、RTF、TIF格式的,so,我直接导出了TIF格式。就这两天,客户跟我说,多页的报表导出来只有第一页,这…好像理所当然,导出的是TIF格式的,你手机上也只能当图片看了。怎么说也是没有考虑到位,就帮客户改了。
废话就这么多吧,下面直接上代码。
public void ConvertTiff2Jpeg(string tiffFileName, string jpegFileName){var img = Image.FromFile(tiffFileName);var count = img.GetFrameCount(FrameDimension.Page);for (int i = 0; i < count; i++){img.SelectActiveFrame(FrameDimension.Page, i);img.Save(jpegFileName + ".part" + i + ".jpg");}int imageWidth = img.Width;int imageHeight = img.Height * count;Bitmap joinedBitmap = new Bitmap(imageWidth, imageHeight);Graphics graphics = Graphics.FromImage(joinedBitmap);for (int i = 0; i < count; i++){var partImageFileName = jpegFileName + ".part" + i + ".jpg";Image partImage = Image.FromFile(partImageFileName);graphics.DrawImage(partImage, 0, partImage.Height * i, partImage.Width, partImage.Height);partImage.Dispose();File.Delete(partImageFileName);}joinedBitmap.Save(jpegFileName);graphics.Dispose();joinedBitmap.Dispose();img.Dispose();//return jpegFileName;}
这段代码并没有依赖特殊类库,也没有复杂的处理。大概思路就是使用Image类读取Tif文件的每一帧,使用Graphic类画一个图片,根据页数页码计算生成后的图片总像素大小跟每一页的位置就可以了。