标签: libjpeg

libjpeg和.Net jpeg编解码器在单色数据上真的有很大不同吗?

我使用了大量的单色图像数据,今天早上我注意到libjpeg和.Net jpeg编解码器处理单色数据的方式之间似乎存在显着差异.看来使用libjpeg以任意质量设置保存并使用默认.Net jpeg编解码器打开的单色图像实际上只加载了16种不同的灰度,所有中间色调都呈现为点状.

这是由libjpeg保存并由.net加载的平滑渐变的直方图

编解码器冲突的直方图影响梯度

直方图应该是完全水平的.

这里是一个(放大)渐变样本的样本(它应该是一个非常平滑的过渡) 在此输入图像描述

这应该是从左边的灰色85到右边的灰色136的平滑过渡,但实际上只渲染了4个灰度,以进行过渡.

我的问题是我疯了,如果不是这个编解码器差异到底有多远?如果您在不同的程序中使用这两个库,是否有一个很好的解决方法?

我不是要责怪编解码器,只是指出看似差异的东西.我注意到这一点,我知道使用libjpeg创建的图像,假设这是一个质量设置问题,尝试使用faststone图像缩放器来创建测试图像并获得相同的结果,尝试使用irfanview并再次获得相同的结果.由于这两个程序都必须使用一些jpeg库,我倾向于认为它们也使用libjpeg并且存在真正的编解码器冲突.

在加载方面,我遇到了使用我自己的.net代码和使用Paint.net加载图像的相同结果.

最后,这是一个正常分辨率的示例,因此您可以下载并自行尝试.在一些程序中加载它会给你一个很好的渐变(例如你的浏览器),但用你自己的.Net代码加载它,或者Paint.Net会给你一个抖动的渐变,就像上面使用16种灰度渲染一样.

在此输入图像描述

有没有人更多地了解这一点,它有多远,有什么好的解决方法?

.net jpeg image image-processing libjpeg

12
推荐指数
1
解决办法
818
查看次数

Tensorflow:DecodeJpeg方法为桌面和移动设备提供相同图像的不同像素值

DecodeJpeg在训练模型时使用了Tensorflow 来读取图像.为了在Android设备上使用相同的方法,我使用bazel for android编译了Tensorflow DecodeJpeg.

我尝试在桌面上读取相同的图像,这是一x86_64台运行Windows 的机器.我跑了DecodeJpeg与默认值的图像的方法dct_method设置为'',INTEGER_FAST,INTEGER_ACCURATE.

arm64对于相同的图像,我在设备上做了同样的事情.但是,在相同设置下,相同图像的像素值明显不同.

例如,在(100,100,1)桌面上的值是213,而它是204打开的arm64.

如何确保这两个设备的像素值相同?这是我用过的图像

更新: 在Gimp上(100,100)的像素值是(179,203,190)

对于dct_method设置为INTEGER_FAST,(100,100)x86_64 (171, 213, 165)上的值是,它是在臂上(180, 204, 191)

对于dct_method设置为INTEGER_ACCURATE,(100,100)x86_64 (170, 212, 164)上的值是,它是在臂上(179, 203, 190)

它是(170, 212, 164)PIL,这是我用得cv2.imread也.

android arm libjpeg tensorflow

11
推荐指数
1
解决办法
347
查看次数

libjpeg解码为BGR

我正在使用libjpeg将jpeg映像从磁盘解码到堆上分配的内存缓冲区.我用来jpeg_read_scanlines从文件中读取和解码每个扫描线.这完美地工作,将每个像素解码为24位RGB值.

问题是我正在使用一个额外的第三方库,它需要一个BGR格式的缓冲区(而不是RGB).当使用这个库时,我得到奇怪的结果,因为通道的顺序错误.

因此,我想找到一种方法使libjpeg解码为BGR格式而不是RGB.我已经在网上搜索过,无法找到如何配置libjpeg来做到这一点?我知道我可以通过内存缓冲区进行额外的传递并手动重新排序颜色通道,但是我正在处理的应用程序非常关键,必须尽可能快速有效.

c++ jpeg image image-processing libjpeg

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

我可以使用libjpeg读取带有alpha通道的JPEG吗?

关于具有alpha通道的JPEG是否有效似乎存在争议.我一直认为正确的答案是在JPEG常见问题解答中,基本上是"否".(这在Stack Overflow的另一个问题中重申了.)

但是,Sun的ImageIO库中的Java的JPEGImageWriter将很乐意使用alpha通道编写和读取灰度和RGB图像,即使在Linux上我几乎没有应用程序,我已经尝试过正确加载这些JPEG.这在过去曾被报道为一个错误,但Sun的回答是这些是有效的文件:

这不是Image I/O错误,而是提交者提到的其他应用程序的缺陷.IIO JPEGImageWriter能够使用包含alpha通道的颜色模型(在IJG原生源代码中称为"NIFTY"颜色空间,如RGBA,YCbCrA等)来编写图像,但许多应用程序都不知道这些色彩空间.因此,即使IIO JPEG编写器写入的这些图像符合JPEG规范(对各种颜色空间可能性视而不见),某些应用程序可能无法识别包含alpha通道的颜色空间,并且可能会抛出错误或渲染损坏图像,正如提交者所描述的那样.

希望保持与其他alpha-unaware应用程序兼容的开发人员应该编写不包含alpha通道的图像(例如TYPE_INT_RGB).希望能够以JPEG格式编写/读取包含Alpha通道的图像的开发人员可以使用Image I/O API执行此操作,但需要注意的是,许多本机应用程序不完全符合YCbCrA和RGBA格式.

有关更多信息,请参阅Image I/O JPEG元数据格式规范和使用说明:http: //java.sun.com/j2se/1.4.1/docs/api/javax/imageio/metadata/doc-files/jpeg_metadata. HTML

关闭为"不是错误".xxxxx @ xxxxx 2003-03-24

我正在使用一个创建这些文件的Java应用程序,并希望编写一些可以尽快加载这些文件的C代码.(基本上问题是Java ImageIO库在解压缩这些文件时速度非常慢,我们希望通过JNI用本机代码替换加载器来改善这一点 - 这是目前的性能瓶颈.)

这里有一些示例文件 - 向任何有嗜铁的人道歉:

在这里,您可以看到尝试使用我认为使用的各种Linux软件查看灰度+ alpha和RGB + alpha图像的结果libjpeg:

带有各种程序的alpha通道视图的灰度图像http://mythic-beasts.com/~mark/all-alpha-bridges.png

具有alpha通道视图的RGB图像与各种程序http://mythic-beasts.com/~mark/all-alpha-clowns.png

因此看起来好像在每种情况下都会误解色彩空间.唯一允许的值jpeglib.h是:

/* Known color spaces. */

typedef enum {
        JCS_UNKNOWN,            /* error/unspecified */
        JCS_GRAYSCALE,          /* monochrome */
        JCS_RGB,                /* red/green/blue */
        JCS_YCbCr,              /* Y/Cb/Cr (also known as YUV) */
        JCS_CMYK,               /* C/M/Y/K */ …
Run Code Online (Sandbox Code Playgroud)

java jpeg file-format libjpeg color-space

10
推荐指数
1
解决办法
4758
查看次数

PHP Imagick JPEG优化

我正在使用PHP Imagick运行时调整图像大小.该网站有一个图片上传功能,我们不能信任用户使用Web友好JPEGs,因为在mass-import有许多35MB图像,甚至一些大的13MB.每个图像都变成了一个缩略图(200x200),当从列表视图进入详细视图时,只显示一个图像,所以性能不是很大,尽管我们不能完全抛弃它.这是我们到目前为止所做的事情:

$iMagick = new Imagick($file);
$iMagick->setImageResolution(72,72);
$iMagick->resampleImage(72,72,imagick::FILTER_UNDEFINED,1);
$geometry = $iMagick->getImageGeometry();
if ($geometry['height'] > 1920 || $geometry['width'] > 1080) {
    $iMagick->scaleImage(1920, 0);
    if($geometry['height'] > $resizeHeight) {
        $iMagick->scaleImage(0, 1080);
    }
}
$iMagick->setImageCompression(Imagick::COMPRESSION_JPEG);
$iMagick->setImageCompressionQuality($compression);
$iMagick->writeImage($file);
$Imagick->clear();
Run Code Online (Sandbox Code Playgroud)

旁注:我刚刚在条件逻辑中意识到高度/宽度的缺陷,所以暂时忽略它.我会很快编辑这个问题,以反映正确的条件比较.对于那些没有抓住它的人来说,它将所有图像缩放到1920宽度,即使它应该是缩放高度,然后在缩放之后将其缩小到最大尺寸1080 height.

我用来测试的3MB 2398×2400图像以图像开始.将其缩放以1079x1080产生1.5MB图像,然后按JPEG质量添加压缩70将其降低到750KB.使用kraken.io,图像能够被压缩到不到60KB.我还能对这个脚本做些什么,因为它需要在运行时优化图像吗?

我已经阅读了使用已安装的libjpeg的建议,但我找不到任何关于它启用的功能的文档,或者是否有办法强制Imagick专门使用它.我甚至不确定Imagick是不是已经使用过它了.

编辑:解决方案

function itm_optimizeImage($file, $compression = 70, $maxDimensions = ['width' => null, …
Run Code Online (Sandbox Code Playgroud)

php jpeg libjpeg imagick image-compression

10
推荐指数
1
解决办法
9648
查看次数

我在哪里可以找到IJG libjpeg的好教程

我需要对这个库做一些工作,我发现http://apodeline.free.fr/DOC/libjpeg/libjpeg.html上的文档有缺陷(不完整的函数签名等).有没有人知道其他一些方面或有一些示例代码说明常见的任务?

[编辑]我也用一个例子找到了这个问题,但其他任何一个都会有所帮助.

c libjpeg ijg

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

需要帮助使用libjpeg读取JPEG文件

我按照libjpeg示例文件中的示例代码,但是我无法读取图像数据.

我有以下结构,我创建了这个结构的一个实例.

 struct ImageData {
        unsigned char *pixels;
        long  width;
        long height;
    };

    ImageData *imageData;
Run Code Online (Sandbox Code Playgroud)

下面是我的read_JPEG_file函数:

int read_JPEG_file (char * filename)
{
    struct jpeg_decompress_struct cinfo;
    struct my_error_mgr jerr;

    /* More stuff */
    FILE * infile;      /* source file */
    JSAMPARRAY buffer;      /* Output row buffer */
    int row_stride;     /* physical row width in output buffer */

    if ((infile = fopen(filename, "rb")) == NULL) {
        fprintf(stderr, "can't open %s\n", filename);
        return 0;
    }

    /* Step 1: allocate and initialize JPEG decompression …
Run Code Online (Sandbox Code Playgroud)

c++ libjpeg

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

如何解决IOError:读取图像文件时数据流损坏?

我在Ubuntu 11.04下工作.我正在尝试在我的Django项目中使用PIL.可悲的是,PIL无法加载我的图像.

这是PIL设置摘要:

PIL 1.1.7 SETUP SUMMARY
--------------------------------------------------------------------
version       1.1.7
platform      linux2 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24)
              [GCC 4.5.2]
--------------------------------------------------------------------
*** TKINTER support not available
--- JPEG support available
--- ZLIB (PNG/ZIP) support available
--- FREETYPE2 support available
--- LITTLECMS support available
--------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

我尝试在python shell中编码,当我调用load()函数时它返回错误:

>>> import PIL
>>> import Image
>>> import _imaging
>>> i = Image.open("someimage.jpg")
>>> i
<JpegImagePlugin.JpegImageFile image mode=RGB size=600x599 at 0x9646C0C>
>>> i.load()
Traceback (most recent call last):
File "<console>", line 1, in <module> …
Run Code Online (Sandbox Code Playgroud)

python django libjpeg python-imaging-library

8
推荐指数
1
解决办法
6550
查看次数

如何在OSX上安装libjpeg?

libjpeg或libjpeg-turbo是安装Pillow的要求,这是在django上存储图像的新要求.所以我需要安装Pillow,但是只有jpeg通过名为libjpeg或libjpeg-turbo的软件包获得支持才能生效.我希望至少是这种情况.

这种依赖关系在开发服务器上不是问题,但我需要在本地做一些工作(Macbook Pro OSX 10.11.5).还没有能够做到或找到安装OSX的解决方案.我希望我会找到的东西pipconda但并没有什么的OSX.我已经看到在Linux上安装有各种常规方法.

python macos libjpeg libjpeg-turbo

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

尝试使用弹性beanstalk安装libjpeg-devel时出错

我正在尝试在AWS Elastic beanstalk上运行的Django应用程序上进行一些图像调整大小,所以我正在尝试安装Pillow来完成这项工作.

正如之前的一些帖子所述,我正在补充

packages:
  yum:
    libjpeg-devel: '6b'
Run Code Online (Sandbox Code Playgroud)

在我的.ebextension/myapp.config的顶部

我的requirements.txt包括:

Django==1.6.7
boto>=2.32.1
django-filter>=0.7
django-password-reset>=0.7
django-storages>=1.1.8
django-taggit==0.12
djangorestframework>=2.3.13
django-bootstrap3>=4.11.0
django-bootstrap3-datetimepicker>=2.2.3
python-dateutil>=2.2
pytz>=2014.2
six>=1.7.3
wsgiref==0.1.2
yolk==0.4.3
Pillow==2.5.3
googlemaps==1.0.2
MySQL-python>=1.2.5
Run Code Online (Sandbox Code Playgroud)

但当我eb start或者git aws.push,我在弹性beanstalk日志中得到以下错误:

2014-09-15 07:10:23,596 [INFO] Running configSet Infra-EmbeddedPreBuild
2014-09-15 07:10:23,598 [INFO] Running config prebuild_0_ampervue
2014-09-15 07:10:32,556 [ERROR] libjpeg-devel-6b is not available to be installed
2014-09-15 07:10:32,557 [ERROR] Error encountered during build of prebuild_0_ampervue: Yum    does not have libjpeg-devel-6b available for installation
Traceback (most recent …
Run Code Online (Sandbox Code Playgroud)

django libjpeg amazon-web-services pillow amazon-elastic-beanstalk

7
推荐指数
1
解决办法
3116
查看次数