我正在尝试从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个索引。这样太多了吗?有没有更好的方法从网站获取图像?我一直在寻找各种各样的东西,现在我在这里。
非常感谢任何文章/建议/答案!感谢。
答案 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
,但转换器似乎并不能识别数组内容的格式。
注意:
.pdf
创建了一个 458,330的数组
指数并且不会通过转换器进行处理。.pdf
创建了一个 4,054个索引的数组,
处理得当。.png
,创建一个 7,945个索引的数组,
并且不会通过转换器进行处理。.pdf
,创建了一个 2,769,747的数组
索引,正确处理。由于这些结果,我认为问题在于使用的文件类型 - 而不是文件的大小。
我还没有找到解决这个问题的方法,但是当我这样做时,我会编辑这个答案以反映它以供有需要的人参考。