Byte []太大而无法转换为System.Drawing.Image?

时间:2016-12-21 21:30:28

标签: c# arrays image converter pdfsharp

我正在尝试从Image保存Byte[],并且我继续被ArgumentException : Parameter is not valid踢出。我想知道Byte[]是否太大而无法转换。有限制吗?

代码:

private XImage[] GetImagesFromURL(List<string> lstCutSheetURLs)
{
    int itr = lstCutSheetURLs.Count;
    XImage[] m_imgCutSheets = new XImage[itr];

    using (var webClient = new WebClient())
    {
        for (int i = 0; i < itr; i++)
        {
            var imageBytes = webClient.DownloadData(lstCutSheetURLs[i]);
            if (imageBytes != null && imageBytes.Length > 0)
            {
                MemoryStream ms = new MemoryStream();
                ImageConverter converter = new ImageConverter();

                //
                //THIS IS WHERE IT BREAKS EVERY TIME
                Image img = (Image)converter.ConvertFrom(imageBytes);
                //

                img.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                m_imgCutSheets[i] = XImage.FromStream(ms);
            }
        }
    }

    return m_imgCutSheets;
}

Byte[]最终持有458,330个索引。这样太多了吗?有没有更好的方法从网站获取图像?我一直在寻找各种各样的东西,现在我在这里。

非常感谢任何文章/建议/答案!感谢。

2 个答案:

答案 0 :(得分:1)

PDF文件是矢量文件。似乎ImageConverter类无法处理PDF文件(根据您的自我答案判断; PDF文件不仅仅是图像,而且ImageConverter不会尝试转换它们)。如果可以,它仍然会从根本上将PDF内容从矢量更改为光栅,从而失去可扩展性并可能导致更大的文件。

您可以使用XPdfForm类将页面从一个PDF文件添加到另一个PDF文件。您可以在调用DrawImage时使用表单对象,就像将光栅图像绘制为PDF一样。

代码段:
XPdfForm form = XPdfForm.FromFile(filename);

PDFsharp网站上的示例代码:
http://pdfsharp.net/wiki/TwoPagesOnOne-sample.ashx

JPG文件是您的代码应该处理的另一个特例。将JPG转换为PNG是可能的,但没有任何意义。 PNG是一种无损格式,JPG有损失但却大幅减少了文件大小。在大多数情况下,从JPG转换为PNG会导致带有JPEG伪影的较大文件。

恕我直言,可以将ImageConverter用于PDF和JPG旁边的其他类型。查看文件是否完整可能是一个很好的验证 由于XImage.FromStream可以处理多种图像格式(PNG,BMP,GIF,TIFF,JPG),因此除了验证之外,这可能无法真正添加功能。

虽然这并没有真正回答您标题中的问题,但这是关于PDFsharp图像处理/ PDF图像处理的一般建议,您在问题中询问了相关建议。

答案 1 :(得分:0)

事实证明,(我的测试至少没有)对 let clickableSub = sub.replace(/<span>/g, '<span onclick="showDict(this)">') 创建ImageConverter将处理的索引数量的限制。

但是,似乎没有格式限制。我试图从在线检索System.Drawing.Image个文件,将它们存储在我的.pdf中,然后将它们放在byte[]变量中。虽然我成功地检索了Image,但转换器似乎并不能识别数组内容的格式。

注意:

  1. 我检索到的原始 .pdf 创建了一个 458,330的数组 指数并且不会通过转换器进行处理。
  2. 我检索到的 .pdf 创建了一个 4,054个索引的数组,     处理得当。
  3. 然后使用第二个 .png ,创建一个 7,945个索引的数组,     并且不会通过转换器进行处理。
  4. 最后,使用了 .pdf ,创建了一个 2,769,747的数组     索引正确处理
  5. 由于这些结果,我认为问题在于使用的文件类型 - 而不是文件的大小。

    我还没有找到解决这个问题的方法,但是当我这样做时,我会编辑这个答案以反映它以供有需要的人参考。