对于我正在进行的网络实验,我需要任意大小的图像文件。
我对如何创建这样的文件感到很遗憾。我需要JPEG,PNG和PDF格式的5MB,10MB和20MB文件。
在我第一次尝试生成这些文件时,很明显由于这些格式的压缩方案,仅通过指定空白分辨率来生成任意大小的文件是不可能的(或者至少我不知道如何)文件。
是否有一种快速(程序化?)方法可以生成这些文件?
编辑:我正在研究创建任意大小的虚拟文件,但如果有办法创建具有正确内部格式的实际JPEG,PNG或PDF,那将是理想的。
答案 0 :(得分:4)
这只是一个建议。不知道它是否会起作用。
也许您可以生成正确大小的位图并转换它们?
如果使位图很难压缩(1)?然后,您应该能够将它们转换为非常接近目标大小的jpg和png。
(1)我的建议是,这可以通过使位图中的每个像素成为不同的颜色(尽可能)来实现
修改强>
这个简单的解决方案可能不适用于jpg,但至少png似乎有效。
我把c#中的一个小测试应用程序一起攻击试试。以下是它的内容:
private void make_bitmap(int width, int height)
{
Random random = new Random();
Bitmap B = new Bitmap(width, height);
int redvalue = 0;
int greenvalue = 0;
int bluevalue = 0;
bool pick_random_color = true;
for (int x = 0; x < width; x++)
{
for (int y = 0; y < width; y++)
{
Color col;
if (pick_random_color)
{
col = Color.FromArgb(random.Next(0, 255), random.Next(0, 255), random.Next(0, 255));
}
else // iterate over all colours repeatedly
{
if (redvalue == 255) { redvalue = 0; greenvalue++; } else { redvalue++; }
if (greenvalue == 256) { greenvalue = 0; bluevalue++; }
if (bluevalue == 256) { redvalue = 0; greenvalue = 0; bluevalue = 0; }
col = Color.FromArgb(redvalue, greenvalue, bluevalue);
}
B.SetPixel(x, y, col);
}
}
B.Save("image.bmp");
B.Save("image.jpg", ImageFormat.Jpeg);
B.Save("image.png", ImageFormat.Png);
B.Dispose();
}
答案 1 :(得分:2)
文件内部需要是JPEG格式,还是只需名为JPEG的任意二进制文件?如果是后者,请参阅此Stack Overflow答案:
答案 2 :(得分:1)
我会从所有这些格式的“巨大”文件(超过最大文件大小)开始,然后使用imagemagick convert迭代调整它们,直到找到所需文件大小的详细信息。
可能需要一些试验和错误(虽然可以轻松编写脚本)但应该进行一次性实验。
答案 3 :(得分: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);
}
}
}
如果使图像像素大小变大,JPEG文件会变大。您还可以添加元数据,但由于存在一些大小限制,因此很难获得仅包含元数据的大文件。
PDF是最简单的 - 只需使用未压缩的图像制作一个大页面并继续添加页面 - 它会快速变大 - 除非你打开它,否则没有压缩。您可以使用PdfEncoder
在DotImage中轻松完成此操作 - 只需在FileSystemImageSource
中给出一个jpgs列表 - 代码未显示为不会让所有人感到厌烦,但我很乐意提供它对任何想要它的人 - 只需致电Atalasoft并要求我(或打开支持案例并提及此问题。