您好我找不到将MULTI PAGE tiff图像转换为字节数组的示例。
对于将字节数组转换为Tiff,我使用此方法
public static Tiff CreateTiffFromBytes(byte[] bytes)
{
using (var ms = new MemoryStream(bytes))
{
Tiff tiff = Tiff.ClientOpen("in-memory", "r", ms, new TiffStream());
return tiff;
}
}
编辑:
此方法将包含更多页面的TIFF图像转换为字节数组。我认为在这种方法中会成为问题的根源。
//imageIn is tif image with 12 pages
public static byte[] ImageToByteArray(System.Drawing.Image imageIn)
{
using (var ms = new MemoryStream())
{
imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Tiff);
return ms.ToArray();
}
}
public static List<System.Drawing.Image> GetAllPages(System.Drawing.Image multiTiff)
{
var images = new List<System.Drawing.Image>();
var bitmap = (Bitmap)multiTiff;
int count = bitmap.GetFrameCount(FrameDimension.Page);
for (int idx = 0; idx < count; idx++)
{
bitmap.SelectActiveFrame(FrameDimension.Page, idx);
using (var byteStream = new MemoryStream())
{
bitmap.Save(byteStream, ImageFormat.Tiff);
images.Add(System.Drawing.Image.FromStream(byteStream));
}
}
return images;
}
转换为字节数组后,我丢失了页面。 字节数组中的图像只有一页。
Image src = Image.FromFile(source);
//imagesInSource.Count (pages) is 12
List<Image> imagesInSource = GetAllPages(src);
byte[] imageData = ImageToByteArray(src);
Image des = ImageConvert.ByteArrayToImage(imageData);
//imagesInSource.Count (pages) is 1
List<Image> imagesInDes = GetAllPages(des);
答案 0 :(得分:1)
我不确定为什么你不能将TIFF文件发送到服务?毕竟文件只是字节。
第一个代码段中的代码不正确,因为您处理传递给Tiff
对象的内存流。你不应该这样做。 Tiff
对象将自行配置流。
修改强>
在第三个片段中,您为System.Drawing.Image
的每个页面创建图像,但是您只将第一个生成的图像转换为字节数组。你应该使用像
List<byte[]> imagesBytes = new List<byte[]>();
foreach (Image img in imagesInSource)
{
byte[] imageData = ImageToByteArray(src);
imageBytes.Add(imageData);
}
然后您应该将imagesBytes
发送到您的服务器并从中创建几个TIFF图像。
无论如何,您似乎应该多考虑一下真正尝试做什么。因为目前我不清楚所有这些转换的用途。