Qt 支持HEIC/HEIF格式图片

您所在的位置:网站首页 什么看图软件可以打开heic Qt 支持HEIC/HEIF格式图片

Qt 支持HEIC/HEIF格式图片

2024-01-16 16:57| 来源: 网络整理| 查看: 265

HEIF 格式简介(源于百度知道) heic的格式是苹果针对iOS11专门研发的一个照片格式。Heic是Apple iOS和macOS的文件格式,用于处理图像和视频。Heic是IOS 11系统中取代原始视频和照片的H.264和JEP格式。Heic格式不仅可以节省内存,还可以保留原始图像质量。Heic格式是Apple iOS和macOS的专用格式 与JPG相比,它占用的空间更小,画质更加无损。HEIC格式照片支持iOS11及macOS High Sierra(10.13)及更新版本。但是此种格式是无法在Windows 中直接使用看图软件打开的(Windows10 RS4开始支持该格式)。

HEIF和HEIC的关系? HEIF 是图片格式,HEVC (HEVC 是编码格式(比如 H.264,H.265))进行编码的 HEIF 图片就是后缀为 .heic 的图片

Qt 支持HEIF插件编译 首先声明,Qt官方并未支持heic格式图片,但已经有大神基于libheif库做了Qt的插件,本文只是帮住大家解决如何编译该Heif插件

插件github地址 编译依赖:Cmake、libheif (≥ version 1.1)、Qt 5 (Core and GUI modules) 官方文档说编译依赖的是cmake、pkg-config(个人不了解,如果有大神请指点)是不准确的,容易产生误导,真实的依赖是Qt+libheif并且通过Cmake进行构建工程

下载编译qt-heif-image-plugin 1. git clone [email protected]:jakar/qt-heif-image-plugin.git

首先我们直接编译会报错

在这里插入图片描述这里本质就是我们找不到pkg-config的库,所以我们需要先解决编译环境配置问题

2.

 配置构建环境

安装Libheif,github的readme中已经清楚说明了"Libheif is included in Vcpkg.",该库已经被包含在Vcpkg中,为了简化我们还需要自己编译Libheif,我们直接使用Vcpkg 进行安装Libheif

git clone https://github.com/microsoft/vcpkg

在这里插入图片描述

.\vcpkg\bootstrap-vcpkg.bat

在这里插入图片描述

3.

安装Libheif(以64位位列) 

指定安装(编译)64位库 > .\vcpkg\vcpkg install libheif:x64-windows #指定安装(编译)32位库 > .\vcpkg\vcpkg install libheif:x86-windows #默认安装32位 > .\vcpkg\vcpkg install libheif 

在这里插入图片描述

译安装之后,输出 

在这里插入图片描述

安装pkg-config

由于后续会修改Cmake文件,后续并未真正用到pkg-config,此步骤可以忽略,尽量跟着做

./vcpkg install pkgconf:x64-windows

在这里插入图片描述  

如何让Cmake 知道我们安装的vcpkg库? cmake要用vcpkg下载的库 设置DCMAKE_TOOLCHAIN_FILE         格式:“-DCMAKE_TOOLCHAIN_FILE=[path to vcpkg]/scripts/buildsystems/vcpkg.cmake” 我的目录是E:\Git\vcpkg

E:\Git\vcpkg\downloads\tools\cmake-3.22.2-windows\cmake-3.22.2-windows-i386\bin\cmake -B ./build_2019 -G "Visual Studio 16 2019" -A x64 -S . "-DCMAKE_TOOLCHAIN_FILE=E:\\Git\\vcpkg\\scripts\\buildsystems\\vcpkg.cmake"

解释:

cmake地址 -B ./build_2019 -G VS版本 -S ."-DCMAKE_TOOLCHAIN_FILE=E:\\Git\\vcpkg\\scripts\\buildsystems\\vcpkg.cmake"

在这里插入图片描述

先修改CMAKE在执行上面的语句。CMAKE目录胃src/cmakelist,直接复制下面的并替换QT编译器路径

cmake_minimum_required(VERSION 3.5) # lowest version tried #新增加=== #DEBUG增加后缀 set(CMAKE_DEBUG_POSTFIX "d") set(LIBHEIF_PATH C:\\Users\\Admin\\vcpkg\\installed\\x64-windows) set(QT_PATH "E:\\Qt\\5.12.6\\msvc2017_64" CACHE PATH "qt5 cmake dir") set(CMAKE_PREFIX_PATH ${QT_PATH}) ###此处路径添加你自己的 set(LIBHEIF_INC_DIR ${LIBHEIF_PATH}\\include) set(LIBHEIF_LIB_DIR ${LIBHEIF_PATH}\\lib) #设置附加头文件 include_directories(${LIBHEIF_INC_DIR}) #设置附加库目录 link_directories(${LIBHEIF_LIB_DIR}) #新增加=== set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) # make release build, if not specified # (from https://blog.kitware.com/cmake-and-the-default-build-type/) set(default_build_type "RelWithDebInfo") if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE STRING "Build type" FORCE) set_property( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") endif () # compiler flags # TODO: separate GCC and Clang warnings; add more #修改== set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} \ -Wall \ ") #set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Og") #修改=== set(sanitizer_flags "-fsanitize=address -fsanitize=undefined") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${sanitizer_flags}") set(CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS_DEBUG} ${sanitizer_flags}") # # third-party libs # # qt find_package(Qt5 COMPONENTS Core Gui REQUIRED) add_definitions(-DQT_NO_KEYWORDS) set(CMAKE_AUTOMOC ON) # libheif #修改== #find_package(PkgConfig) #pkg_check_modules(libheif REQUIRED libheif>=1.1) set (LIB_HEIF heif libx265 libde265) #修改== # # project source # set(CMAKE_INCLUDE_CURRENT_DIR ON) set(sources main.cpp qheifhandler.cpp) add_library(qheif MODULE ${sources}) #修改== target_link_libraries( qheif PRIVATE Qt5::Gui ${LIB_HEIF} ) #修改== # # installation # # Use qmake to find plugin dir (adapted from lxqt-qtplugin) get_target_property( QT_QMAKE_EXECUTABLE ${Qt5Core_QMAKE_EXECUTABLE} IMPORTED_LOCATION) if (NOT QT_QMAKE_EXECUTABLE) message(FATAL_ERROR "qmake is not found.") endif () execute_process( COMMAND ${QT_QMAKE_EXECUTABLE} -query QT_INSTALL_PLUGINS OUTPUT_VARIABLE QT_PLUGINS_DIR OUTPUT_STRIP_TRAILING_WHITESPACE) if (QT_PLUGINS_DIR) message(STATUS "Qt5 plugin directory: " "${QT_PLUGINS_DIR}") else () message(FATAL_ERROR "Qt5 plugin directory cannot be detected.") endif () # Prefix with DESTDIR if available to allow packaging if (ENV{DESTDIR} AND NOT ENV{DESTDIR} STREQUAL "") set(plugins_dir "$ENV{DESTDIR}${QT_PLUGINS_DIR}") else () set(plugins_dir "${QT_PLUGINS_DIR}") endif () install( TARGETS qheif LIBRARY DESTINATION "${plugins_dir}/imageformats") # vim:sw=2

 执行成功后,打开qt-heif-image-plugin-master\build_2019\qtheifimageplugin.sln 项目,选中X64或者x86,点击生成,即可在qt-heif-image-plugin-master\build_2019\bin\imageformats目录下发现生成的4个动态库

把qheif放到QT安装目录下 一个是debug版本 一个是release,编译的时候用的什么编译器版本则放到对应编译器版本下面  最后将另外3个生成的动态库 放到exe运行目录下即可。图为测试程序。3个动态库放到这下面即可。

tips:因为此库为QT插件的方式去开发的,所以不需要添加额外的头文件,只需要将插件库放到之前所说的Qt\5.12.6\msvc2017_64\plugins\imageformats目录下即可让Qimage支持此格式图片。将另外3个库放到exe执行目录下

测试代码

#include #include #include #include #include const QString path="E:\\Git\\qt-heif-image-plugin\\bird_burst.heic"; int main(int argc, char *argv[]) { QApplication a(argc, argv); //输出支持的图片 qDebug()


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3