标签: image-compression

压缩jpeg以达到指定目标图像文件大小的算法

我有几个 javascript 库(Angular-ahdinJIC),我可以用它们来压缩用户上传的图像,然后再将其提交到后端。

我见过的所有库都采用质量参数并使用 jpeg 压缩来缩小文件。在压缩之前,基于任何质量值,您不知道生成的图像的文件大小是多少。

我的想法是使用“二分搜索”类型的算法来尝试不同的质量百分比,直到我最终获得刚好低于目标最大文件大小的图像。

将以 50% jpeg 质量开始。如果压缩图像低于目标文件大小,则采用 75% 质量,否则采用 25% 质量,依此类推。它会在保证的 6 次迭代内将目标文件大小达到 1% 的粒度,然后我会停止。

假设没有一个库已经具有此功能,是否有比二分搜索更好的方法?是否有任何图像研究表明种子价值高于 50%?

javascript image-compression

3
推荐指数
1
解决办法
1830
查看次数

Bitmap.compress - 不起作用

我正在尝试压缩用相机拍摄的照片而不缩放图像尺寸。

我尝试了 bitmap.compress,但没有成功。只是为了确保我尝试压缩从资源加载的位图,但仍然没有成功。

有任何想法吗?

示例代码:

//load bitmap from resources:
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.trolltunga);
Log.d("roee", "onImageCaptured: before compress = " + bitmap.getByteCount() + ", " + bitmap.getWidth() + ", " + bitmap.getHeight());

//compressing
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 50, bos);
Bitmap comp = BitmapFactory.decodeStream(new ByteArrayInputStream(bos.toByteArray()));
Log.d("roee", "onImageCaptured: after compress = " + comp.getByteCount() + ", " + comp.getWidth() + ", " + comp.getHeight());
Run Code Online (Sandbox Code Playgroud)

记录结果:

D/roee: onImageCaptured: before compress = 10800000, 3000, 900
D/roee: onImageCaptured: after compress = 10800000, 3000, 900
Run Code Online (Sandbox Code Playgroud)

java compression android bitmap image-compression

3
推荐指数
1
解决办法
4166
查看次数

256x256 24位渐变PNG怎么只有777字节?

这是有问题的文件:

渐变 PNG

如果您在十六进制编辑器中打开此 PNG 图像,您会发现该文件只有 777 字节大。这怎么可能?请注意,每个像素都有不同的颜色值!

具有唯一像素的 24 位 256x256 图像应至少为 197KB。
256*256*3 字节 = 196608 字节

这是使用 PNG 文件的某些隐藏功能还是使用某种 hack?

编辑:作为完整性检查,我将 PNG 编码为 Base64,果然,它是一样小。

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAIAAADTED8xAAAACXBIWXMAAABIAAAASABGyWs+AAACu0lEQVR42u3TAQkAMBDEsHuYf80T0oRa6G07qdrbDbIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYC0DxplBfxP7XIvAAAAAElFTkSuQmCC
Run Code Online (Sandbox Code Playgroud)

compression png image file image-compression

3
推荐指数
1
解决办法
2192
查看次数

torch.no_grad() 影响模型精度

我收到错误“CUDA 内存不足”,然后我将 torch.no_grad() 函数添加到我的代码中。这会影响我的准确性吗?

for iters in range(args.iterations):

with torch.no_grad():
    encoded, encoder_h_1, encoder_h_2, encoder_h_3 = encoder(
    res, encoder_h_1, encoder_h_2, encoder_h_3)

with torch.no_grad():
    code = binarizer(encoded)

with torch.no_grad():
    output, decoder_h_1, decoder_h_2, decoder_h_3, decoder_h_4 = decoder(
    code, decoder_h_1, decoder_h_2, decoder_h_3, decoder_h_4)

res = res - output.detach()
codes.append(code.data.cpu().numpy())
torch.cuda.empty_cache()
print('Iter: {:02d}; Loss: {:.06f}'.format(iters, res.data.abs().mean()))
Run Code Online (Sandbox Code Playgroud)

python model image-compression torch pytorch

3
推荐指数
1
解决办法
1万
查看次数

这些 FFmpeg APNG 编码器预测方法是什么意思?

通过运行ffmpeg -h encoder=apng,我得到了这个:

APNG encoder AVOptions:
  -dpi               <int>        E..V..... Set image resolution (in dots per inch) (from 0 to 65536) (default 0)
  -dpm               <int>        E..V..... Set image resolution (in dots per meter) (from 0 to 65536) (default 0)
  -pred              <int>        E..V..... Prediction method (from 0 to 5) (default none)
     none                         E..V.....
     sub                          E..V.....
     up                           E..V.....
     avg                          E..V.....
     paeth                        E..V.....
     mixed                        E..V.....
Run Code Online (Sandbox Code Playgroud)

这些用 指定的预测方法有什么区别-pred

我在 ffmpeg.org 或其他地方找不到任何文档。

png ffmpeg image-compression apng

3
推荐指数
1
解决办法
1172
查看次数

我应该使用什么数据结构来存储java中的二进制代码?

我有二进制码为10111,100011,11101111等.现在是什么数据结构我应该用它来存储这些代码,从而最小尺寸需要存储它们?

我不能使用字符串数组,因为所需的大小将比存储上述二进制代码的十进制等效项更多.

java arrays string binary image-compression

2
推荐指数
2
解决办法
1855
查看次数

C#中无损图像压缩的最佳格式

我需要单独保存视频帧并无损压缩它们.我正在寻找c#中最好的方法和格式 - 最好的意思是实现简单性,良好压缩和合理处理要求的最佳平衡.

我知道PNG是无损的,但它的压缩对于照片风格的图像并不是很好.

我知道有一种无损Jpeg格式,但这是用C#实现的吗?

还有其他我不知道的选择吗?

c# png jpeg lossless-compression image-compression

2
推荐指数
1
解决办法
3282
查看次数

多次调用imageWithData:UIImageJPEGRepresentation()只会在第一次压缩图像

为了防止我的应用程序滞后,我正在尝试压缩大于1 MB的图像(主要用于从iphone普通相机拍摄的照片).

UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
NSData *imageSize = UIImageJPEGRepresentation(image, 1);
NSLog(@"original size %u", [imageSize length]);

 UIImage *image2 = [UIImage imageWithData:UIImageJPEGRepresentation(image, 0)];
    NSData *newImageSize = UIImageJPEGRepresentation(image2, 1);
    NSLog(@"new size %u", [newImageSize length]);
    UIImage *image3 = [UIImage imageWithData:UIImageJPEGRepresentation(image2, 0)];
    NSData *newImageSize2 = UIImageJPEGRepresentation(image3, 1);
    NSLog(@"new size %u", [newImageSize2 length]);

picView = [[UIImageView alloc] initWithImage:image3] ;
Run Code Online (Sandbox Code Playgroud)

然而,NSLog我得到了一些东西

 original size 3649058
 new size 1835251
 new size 1834884
Run Code Online (Sandbox Code Playgroud)

第一次和第二次压缩之间的差异几乎可以忽略不计.我的目标是使图像大小低于1 MB.我是否忽视了某些事情/有没有其他方法来实现这一目标?

编辑:如果可能的话,我想避免缩放图像的高度和宽度.

objective-c uiimagepickercontroller uiimage image-compression ios

2
推荐指数
1
解决办法
2万
查看次数

什么影响C#PNG无损压缩率?

Bitmap clip = new Bitmap((int)(8.5 * 72), (int)(11 * 72));
MemoryStream stream = new MemoryStream();
clip.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
byte[] bytes = stream.ToArray();
Run Code Online (Sandbox Code Playgroud)

我跑了它在我的机器上,并且bytes.Length8587,我的同事开发的机器是2009.据说,.NET没有办法影响PNG压缩的质量(或者说这种情况下的比率).这个特殊的图像是空白的,我还有其他测试与内容图像一起工作,他们确认压缩是无损的(我遇到了一些争论,这是一个问题).

但即使压缩是无损的,压缩算法运行时间+ CPU利用率与压缩率/质量之间也需要权衡.我想知道如何System.Drawing.Imaging确定质量,因为上述情况清楚地表明可能存在差异.我怎么能确定在客户的机器上它不会选择100%的质量(这将产生1.457.337大小的文件)?

相关材料:

附加信息:

  • 检查了另一个开发人员的机器,它与我的其他同事的结果一致,所以我的机器是异常值.
  • 每台机器都安装了Win 7 Prof 64位,特定的测试是NUnit,我们使用的是.NET 4
  • 在这方面,我安装的任何软件都可以覆盖.NET的行为.例如我安装了IrfanView,它可以替换任何系统范围的"过滤器"或使用的dll吗?(顺便说一下,我查看了模块调试视图,我没有看到任何异常的dll加载)
  • 它可以受到某些Windows操作系统桌面质量设置的影响吗?

c# png image-compression image-quality

2
推荐指数
1
解决办法
2287
查看次数

客户端v/s服务器端图像压缩

我正在研究用户可以上传图片的内容(图片大小不受限制).现在我有两种选择:使用PHP压缩图像(服务器端)或使用JavaScript压缩客户端计算机上的图像,然后将上载到服务器.我想问一下哪两种方法更好实施?服务器上的压缩可能会导致服务器负载过重,所以我想到客户端压缩,但是如果我上传更大尺寸的图像(假设大约12MB左右),那么由于脚本,浏览器会冻结一段时间.

因此,没有代码只是一个理论问题.目前我正在使用 JIC进行客户端压缩

用于客户端图像压缩的任何其他好的库?哪种方法会更好?任何帮助将非常感激.

html javascript php jquery image-compression

2
推荐指数
1
解决办法
3141
查看次数