首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将带有图像的FixedDocument保存到XPS文件

将带有图像的FixedDocument保存到XPS文件
EN

Stack Overflow用户
提问于 2016-08-02 14:37:39
回答 1查看 1.6K关注 0票数 2

我保存了一个FixedDocumentXPS文件,例如:

代码语言:javascript
复制
void SaveDocument(FixedDocument document, string filePath)
{
    var xps = new XpsDocument(
        filePath, FileAccess.Write, CompressionOption.Maximum);

    var writer = XpsDocument.CreateXpsDocumentWriter(xps);
    writer.Write(document);

    xps.Close();
}

然后,我将XPS文件作为ZIP存档打开,并将我的图像保存为PNG文件。如何将图像文件格式更改为JPG?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-09 21:17:20

我也有同样的问题:我的文件大小太大了,因为照片被嵌入为png而不是jpeg。我通过将包中的所有png文件转换为jpeg来修正它。为了避免更新对图像的引用,我将保持URI不变,但这意味着jpegs的内部URI将以误导的".png“结尾。显然,如果您想要选择转换为jpeg的图像,这会变得更加复杂。

代码语言:javascript
复制
public static void ReplacePngsWithJpegs(Package package)
{
    // We're modifying the enumerable as we iterate, so take a snapshot with ToList()
    foreach (var part in package.GetParts().ToList())
    {
        if (part.ContentType == "image/png")
        {
            using (var jpegStream = new MemoryStream())
            using (var image = System.Drawing.Image.FromStream(part.GetStream()))
            {
                image.Save(jpegStream, System.Drawing.Imaging.ImageFormat.Jpeg);
                jpegStream.Seek(0, SeekOrigin.Begin);

                // Cannot access Uri after part is removed, so store it
                var uri = part.Uri; 

                package.DeletePart(uri);

                var jpegPart = package.CreatePart(uri, "image/jpeg");
                jpegStream.CopyTo(jpegPart.GetStream());
            }
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38723475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档