【问题标题】:Split Image into n parts in c# and convert to pdf在c#中将图像拆分为n部分并转换为pdf
【发布时间】:2019-06-04 10:37:26
【问题描述】:

我有高度 5262 和宽度 1240 的 png 图像需要将该图像拆分为 n 个部分,例如保存单个图像后 n = 3 需要将所有图像推送到单个 pdf。

需要水平分割图像并保存单个图像

        var imgarray = new System.Drawing.Image[3]; 
        Bitmap imgsize = new Bitmap(path);
        var imageHeight = imgsize.Height;
        var imageWidth = imgsize.Width;
        string pathdata = Path.GetDirectoryName(path)
        Bitmap originalImage = new Bitmap(System.Drawing.Image.FromFile(path));
        System.Drawing.Rectangle rect = new System.Drawing.Rectangle(0, 0, originalImage.Width, (originalImage.Height / 3) + 1);

        Bitmap firstHalf = originalImage.Clone(rect, originalImage.PixelFormat);
        firstHalf.Save(pathdata+"\\PageImage1.jpg");
        rect = new System.Drawing.Rectangle(0, originalImage.Height / 3, originalImage.Width, originalImage.Height / 3);

        Bitmap secondHalf = originalImage.Clone(rect, originalImage.PixelFormat);
        secondHalf.Save(pathdata + "\\PageImage2.jpg");
        rect = new System.Drawing.Rectangle(0, originalImage.Height / 3, originalImage.Width, originalImage.Height / 3);
        Bitmap thirdHalf = originalImage.Clone(rect, originalImage.PixelFormat);
        thirdHalf.Save(pathdata+"\\PageImage3.jpg"); 

分割图像并将其转换为 pdf

问题:当我将其拆分为 3 个部分时,仅创建了 2 个图像

【问题讨论】:

  • 嗯,你的后半部分不应该只是originalImage.Height / 3,而是originalImage.Height / 3 * 2,因为你想从原始高度的第二个第三个开始。
  • 正如您在此处看到的,(在资源管理器中预览)在我之前的评论中提到的更改之后,代码按预期工作 - i.stack.imgur.com/aKhvQ.png

标签: c# asp.net image hiqpdf


【解决方案1】:

您应该考虑使用 for 循环而不是重复代码来重写您的代码。

类似这样的:

var path = Path.GetFullPath("07T0L.jpg");
string directory = Path.GetDirectoryName(path);

//optional: cleanup files from a previous run - incase the previous run splitted into 5 images and now we only produce 3, so that only 3 files will remain in the destination
var oldFiles = Directory.EnumerateFiles(directory, "PageImage*.jpg");
foreach (var oldFile in oldFiles)
    File.Delete(oldFile);

var splitInto = 3;
using (var img = Image.FromFile(path))
using (var originalImage = new Bitmap(img))
{
    for (int i = 0; i < splitInto; i++)
    {
        var rect = new Rectangle(0, originalImage.Height / splitInto * i, originalImage.Width, originalImage.Height / splitInto);
        using (var clonedImage = originalImage.Clone(rect, originalImage.PixelFormat))
            clonedImage.Save(directory + $"\\PageImage{i+1}.jpg");
    }
}

还将位图包装到using 以释放文件句柄。

【讨论】:

    猜你喜欢
    • 2013-03-03
    • 2021-12-25
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    相关资源
    最近更新 更多