生成任意大小的图像文件

Ben*_*den 5 image-manipulation image

对于正在进行的网络实验,我需要任意大小的图像文件。

我不知道如何创建此类文件。我需要JPEG,PNG和PDF格式的5MB,10MB和20MB文件。

在我第一次尝试生成这些文件时,很明显,由于这些格式的压缩方案,仅指定空白文件的分辨率就不可能(或者至少我不知道如何)生成任意大小的文件。

有没有一种快速(编程的)方法可以生成这些文件?

编辑:我正在研究创建任意大小的虚拟文件,但是如果有一种方法可以创建具有正确内部格式的实际JPEG,PNG或PDF,那将是理想的选择。

Lou*_*nco 1

分辨率不会改变像素数量,只会改变像素的显示大小 - 增加分辨率会使显示更大,但不会使文件更大。

如果你制作的 JPEG 一遍又一遍地重复相同的信息,它会变得更大——压缩是在 8x8 单元的基础上——如果你有更多的单元,你就会有更多的数据。要使它们更大,请将质量设置为 100 进行编码。另一件事是,JPEG 会以单元为单位去除亮度,因此色调变化的压缩效果比亮度变化的压缩效果更差。

我使用我公司的产品DotImage使用此代码创建了一个 10mb 的 jpg。您可以下载一个 eval 并尝试一下,或者对您的图像 SDK 执行相同的操作。

using System;
using System.Drawing;
using Atalasoft.Imaging;
using Atalasoft.Imaging.Codec;
using Atalasoft.Imaging.Drawing;

namespace MakeLargeImage
{
    class Program
    {
        static void Main(string[] args)
        {
            AtalaImage img = new AtalaImage(1000, 8000, PixelFormat.Pixel24bppBgr);
            Canvas c = new Canvas(img);

            for (int block = 0; block < img.Height; block += 1000)
            {
                for (int line = 0; line < 1000; line += 4)
                {
                    int y = block + line;
                    c.DrawLine(new Point(0, y), new Point(img.Width, block), new AtalaPen(Color.Yellow));
                    c.DrawLine(new Point(0, y + 1), new Point(img.Width, y + 1), new AtalaPen(Color.Red));
                    c.DrawLine(new Point(0, y + 2), new Point(img.Width, y + 2), new AtalaPen(Color.Green));
                    c.DrawLine(new Point(0, block), new Point(img.Width, y + 3), new AtalaPen(Color.Blue));
                }
            }
            JpegEncoder jpeg = new JpegEncoder(100);
            img.Save("10mb.jpg", jpeg, null);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果图像像素尺寸变大,JPEG 文件也会变大。您还可以添加元数据,但很难获得仅包含元数据的大文件,因为存在一些大小限制。

PDF是最简单的——只需用未压缩的图像制作一个大页面并不断添加页面——它会很快变大——除非你打开它,否则没有压缩。您可以在 DotImage 中轻松完成此操作PdfEncoder,只需给它一个 jpg 列表,FileSystemImageSource代码未显示,以免让每个人感到厌烦,但我很乐意将其提供给任何需要它的人,只需致电Atalasoft并询问我(或打开支持案例并参考此问题。