- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 C 程序中,我想使用 libexif 和 libjpeg 在给定路径 inputFilePath ,并将生成的 jpeg 保存到输出路径 outputFilePath。
输入的 jpeg 文件很大(40000 X 40000 像素),因此将整个图像加载到内存中并不可取,也不需要。
我不关心 Jpeg 中其他现有的 Exif 标签,它们可能会被删除。
我已阅读并尝试使用固定 JPEG 的 libexif 提供的示例,但无法弄清楚如何对任何 JPEG 执行相同的操作。
顺便说一句,我确实得到了以下代码,它通过加载 jpeg in-memory 来设置 exif 标签。它使用随 libexif 一起提供的 exif 实用程序中提供的 libjpeg 实现。
ExifEntry *entry;
ExifData *exif = exif_data_new();
if (!exif) {
//Out of memory
}
/* Set the image options */
exif_data_set_option(exif, EXIF_DATA_OPTION_FOLLOW_SPECIFICATION);
exif_data_set_data_type(exif, EXIF_DATA_TYPE_COMPRESSED);
exif_data_set_byte_order(exif, FILE_BYTE_ORDER);
/* Create the mandatory EXIF fields with default data */
exif_data_fix(exif);
/* All these tags are created with default values by exif_data_fix() */
/* Change the data to the correct values for this image. */
entry = init_tag(exif, EXIF_IFD_EXIF, EXIF_TAG_PIXEL_X_DIMENSION);
exif_set_long(entry->data, FILE_BYTE_ORDER, w);
entry = init_tag(exif, EXIF_IFD_EXIF, EXIF_TAG_PIXEL_Y_DIMENSION);
exif_set_long(entry->data, FILE_BYTE_ORDER, h);
entry = init_tag(exif, EXIF_IFD_EXIF, EXIF_TAG_COLOR_SPACE);
exif_set_short(entry->data, FILE_BYTE_ORDER, 1);
/* Create a EXIF_TAG_USER_COMMENT tag. This one must be handled
* differently because that tag isn't automatically created and
* allocated by exif_data_fix(), nor can it be created using
* exif_entry_initialize() so it must be explicitly allocated here.
*/
entry = create_tag(exif, EXIF_IFD_EXIF, EXIF_TAG_USER_COMMENT,
sizeof(ASCII_COMMENT) + sizeof(FILE_COMMENT) - 2);
/* Write the special header needed for a comment tag */
memcpy(entry->data, ASCII_COMMENT, sizeof(ASCII_COMMENT) - 1);
/* Write the actual comment text, without the trailing NUL character */
memcpy(entry->data + 8, FILE_COMMENT, sizeof(FILE_COMMENT) - 1);
/* create_tag() happens to set the format and components correctly for
* EXIF_TAG_USER_COMMENT, so there is nothing more to do. */
JPEGData *jdata;
unsigned char *d = NULL;
unsigned int ds;
ExifLog *log = NULL;
/* Parse the JPEG file. */
jdata = jpeg_data_new();
jpeg_data_log(jdata, log);
jpeg_data_load_file(jdata, inputFilePath);
/* Make sure the EXIF data is not too big. */
exif_data_save_data(exif, &d, &ds);
if (ds) {
free(d);
if (ds > 0xffff)
//Too much EXIF data
};
jpeg_data_set_exif_data(jdata, exif);
/* Save the modified image. */
jpeg_data_save_file(jdata, outputFilePath);
jpeg_data_unref(jdata);
最佳答案
如果您不重新压缩或编辑图像,则不需要 libjpeg
.可以用 fopen
来完成和 fputc
.
exiv2 中对 JPEG 文件结构和元数据有很好的描述。 .大多数 jpeg 文件将以 0xFFD8
开头(图像开始),然后是 APP0
JFIF 数据 block ( 0xFF E0 <length> <data>
)。如果有 EXIF header ,它在 APP1
中 block (0xFF E1 <length> <data>
)。
JPEG 文件中的 block 被格式化为
0xFF xx
) 其中 xx
是En
对于 APPn
block 内容
所以,你的程序大纲是
APP1
阻止APP1
阻止可以使用 exif_data_save_data()
创建 EXIF header 内容在 libexif
.
关于libjpeg - 将 libexif 与 libjpeg 结合使用以在现有 JPEG 上设置 exif 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48077371/
我的目的是使用 libjpeg-turbo (参见 http://www.libjpeg-turbo.org/Main/HomePage )作为独立 Jpeg Group ( http://www.i
当使用 libjpeg 将图像输入 OpenCL 时,为了能够将 channel 视为具有 CL_UNORM_INT8(在 [0.0, 1.0] 范围内 float )的规范化 uint8,您只能用
在我的 C 程序中,我想使用 libexif 和 libjpeg 在给定路径 inputFilePath,并将生成的 jpeg 保存到输出路径 outputFilePath。 输入的 jpeg 文件很
如标题所示,我使用 AWS EC2 和 AWS linux AMI 来设置运行神经式算法的环境。 Nerual-style 我已经成功安装了 torch、Lua、Loadcaffe、Google Pr
如果可能的话,我想使用 libjpeg 从 JPEG 图像的中间读取一行而不读取前面的所有行。这能做到吗? 最佳答案 答案几乎肯定是“是的,你可以,但它需要比你想要的更多的努力”。 JPEG 图像是标
我想使用 libjpeg 库将图像保存到内存( vector )中。我发现那里有功能: init_destination empty_output_buffer term_destination 我的
我正在使用 libjpeg 解码 jpeg 文件。在解码大图像时,用户可能会切换到另一个 jpeg 文件,那么 libjpeg 是否支持解码中断?非常感谢! 最佳答案 Libjpeg 有一个 I/O
我大部分时间都在使用该示例,它确实创建了一个只是乱码的图像: unsigned char* readJpeg(JNIEnv* env, libraw_processed_image_t *raw) {
我使用来自 Independent JPEG Group 的 jpeg 库 v8d我想改变 jpeg 解压缩读取和处理数据的方式。 在 djpeg main() 中,在每个 jpeg_read_sca
来自 jmorecfg.h : #define PACK_TWO_PIXELS(l,r) ((r>16; \ } while(0) #define WRITE_TWO_ALIGNED
我无法理解我从以下代码中得到的段错误: #include #include #include int main(int argc, char** argv){ FILE*
我正在尝试使用 ijg 的 libjpeg 将 RGB 图像压缩为 JPEG。最后的想法是使用图像传感器拍摄图像并将数据压缩为 ARM Cortex M3 Controller 上的 JPEG;但是,
所以我一直在阅读 libjpeg 文档,它非常乏善可陈。 我一直在尝试弄清楚如何从自定义内存缓冲区而不是文件中读取数据,但我不确定如何测试我的解决方案是否正常工作。 目前我从内存中加载 jpeg 的函
我有下一个基于 libjpeg 的 JPEG 图像解压缩标准代码。 jpeg_decompress_struct cinfo; // ...Set error manager and data sou
我正在尝试使用mingw-w64编译libjpeg(版本8d)。我启动的命令是: MyS.BAT /配置 制作 在第三步,我得到这个错误: $ make D:/Builder/bin/make al
我有这样一个常用的代码: struct jpeg_decompress_struct cinfo; jpeg_create_decompress(&cinfo); jpeg_stdio_src(&ci
我正在尝试使用 libjpeg 将图像从一个文件复制到另一个文件。我尝试使用 jpeg_read_scanlines/jpeg_write_scanlines 来复制图像数据,但据我所知这些函数计算
我已经创建了自己的 DCT 计算。 如何使用 jpeg_write_coefficients 将我的 64 个 DCT 值写入使用 jpeg_write_coefficients 的 JPEG 文件(
libjpeg 是否允许/具有缩放输出图像的例程? 我有一个图像需要在保存和加载时调整大小,在输入上提供 width1、height1 并在输出上获取 width2、height2,我真的不能在外面使
我正在使用 C++ JPEG 库 (libjpeg),我意识到当某些函数失败时会调用 exit() 并关闭应用程序。如何覆盖此行为并防止应用程序因 libjpeg 错误而关闭? 最佳答案 这是 lib
我是一名优秀的程序员,十分优秀!