添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

前段时间写了篇 杀鸡用牛刀,FFmpeg API 加载存储图片,比 ImageMagic 和 stb_image 快多了 ,后来发现有个问题,有些 JPG 图片是带有旋转信息的,如果只解码,不获取它的旋转信息,将导致图片的方向错误。

av_dict_get

那如何才能用 FFmpeg 来获取 JPG 的旋转信息呢?查过很多资料,最后终于找到一种方法。由于再次查找时又要翻阅多篇文章,因此记录在此。答案就是使用 av_dict_get 这个方法。

首先,要完成使用 FFmpeg 对 JPG 图片的解码过程,得到解码后的帧图像 AVFrame ,然后,在 AVFrame->metadata 中读取 Orientation 来获取旋转信息。其中 Orientation 的定义如下:

1 = Horizontal (normal) 2 = Mirror horizontal 3 = Rotate 180 4 = Mirror vertical 5 = Mirror horizontal and rotate 270 CW 6 = Rotate 90 CW 7 = Mirror horizontal and rotate 90 CW 8 = Rotate 270 CW

整个功能的具体代码如下:

  AVDictionaryEntry *e = av_dict_get(frame_->metadata, "Orientation", nullptr, 0);
  if (e) {
    string s = e->value;
    if (s.find("6") != string::npos || s.find("7") != string::npos) {
      return 90;
    } else if (s.find("1") != string::npos || s.find("2") != string::npos) {
      return 0;
    } else if (s.find("8") != string::npos || s.find("5") != string::npos) {
      return 270;
    } else if (s.find("3") != string::npos || s.find("4") != string::npos) {
      return 180;

同理,可以通过将参数 Orientation 改为 EXIF 信息中的其他信息名称,来获取图片的其他 EXIF 信息。

正确用法1: AVDictionaryEntry *tag = NULL; tag = av_dict_get(st->metadata, “width”, tag, AV_DICT_MATCH_CASE); 正确用法2:AVDictionaryEntry *tag = av_dict_get(st->metadata, “wid... 使用函数avformat_open_input打开文件,结封装。 使用函数avformat_find_stream_info查找并添加流信息到Format上下文中。 使用函数av_dict_get获取文件中的字典信息。 下面是关键部...
上一篇文章我们学习了FFmpeg音频相关的命令,本篇文章我们来学习FFmpeg图片相关的命令。 和上一篇文章一样,我们准备一个Res文件夹,在里面放一个视频文件(video.mp4,一分钟左右)和一张图片文件(image.jpg)。然后在这个文件夹打开命令行。 接着我们了解一下YUV,YUV是图片的一种编码方式,Y指明亮度,U和V指色度,用于表示像素的颜色。常见的YUV采样有三种,分别是YUV444、YUV422 及 YUV420。 YUV444是指每个像素点都有自己的Y值、U值和V值,如下图。
//ffmpeg转换查看rg8图片命令: ffmpeg -vcodec rawvideo -f rawvideo -pix_fmt bayer_rggb8 -s 2448*2048 -i rg8.raw -f image2 -vcodec bmp rggb8.bmp 参数说明及参考:使用ffmpeg 命令行解码并显示像素格式为.raw图像_xuw_xy的博客-CSDN博客
如题,打开jpg文件的时候,这种文件其实是有EXIF信息的。这里不介绍EXIF信息了,直接介绍如何读到该信息。QT的这个头文件我暂时只发现怎么读到图片的旋转信息,如果我发现新的,会更新这篇博客。先看官方的文档bool ImageViewer::loadFile(const QString &fileName) QImageReader reader(fileName); 狗蛋好活儿: Ota的问题还是比较经典的。签名,权限,本地快速验证等等。做了几十个项目的Ota,感觉都差不多。如果想要低成本android ota方案,可以过来。我们有全的方案,服务器+APP, 帮助适配和解决问题。