GDAL创建JPG或PNG格式图像

简介: GDAL创建JPG或PNG格式图像

GDAL创建JPG或PNG格式图像

目录

1. 概述

根据GDAL文档,JPG/PNG格式支持读取和批量写入,但不支持实时更新。也就是不支持Create()方法,但是支持CreateCopy()方法。也可能是由于JPG/PNG格式是轻量化的压缩格式决定的。

2. 实现

具体的实例如下:

#include <iostream>
#include <gdal_priv.h>
using namespace std;
int main()
{
  GDALAllRegister();          //GDAL所有操作都需要先注册格式
  CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "NO");  //支持中文路径
  //图像参数
  string tilePath = "D:/1.png";
  //string tilePath = "D:/1.jpg";
  int tileSizeX = 256;
  int tileSizeY = 256;
  int dstBand = 3;
  int dstDepth = 1;
  //分配缓冲区
  size_t tileBufSize = (size_t)tileSizeX * tileSizeY * dstBand;
  GByte *tileBuf = new GByte[tileBufSize];
  memset(tileBuf, 0, tileBufSize * sizeof(GByte));
  //绘制一个斜线
  for (int yi = 0; yi < tileSizeY; yi++)
  {
    for (int xi = 0; xi < tileSizeX; xi++)
    {
      if (xi != yi)
      {
        continue;
      }
      size_t m = (size_t)tileSizeX * dstBand * yi + dstBand * xi;
      for (int bi = 0; bi < dstBand; bi++)
      {
        tileBuf[m + bi] = 255;
      }     
    }
  }
  //把数据保存到临时文件MEM  
  GDALDriver *pDriverMEM = GetGDALDriverManager()->GetDriverByName("MEM");
  GDALDataset *pOutMEMDataset = pDriverMEM->Create("", tileSizeX, tileSizeY, dstBand, GDT_Byte, NULL);
  if (!pOutMEMDataset)
  {
    printf("Can't Write Image!");
    return false;
  }
  pOutMEMDataset->RasterIO(GF_Write, 0, 0, tileSizeX, tileSizeY, tileBuf, tileSizeX, tileSizeY,
    GDT_Byte, dstBand, nullptr, dstBand*dstDepth, tileSizeX*dstBand*dstDepth, dstDepth);
  //以创建复制的方式,生成png文件
  GDALDriver *pDriverPNG = GetGDALDriverManager()->GetDriverByName("PNG");
  //GDALDriver *pDriverPNG = GetGDALDriverManager()->GetDriverByName("JPEG"); 
  GDALDataset* tile = pDriverPNG->CreateCopy(tilePath.c_str(), pOutMEMDataset, TRUE, 0, 0, 0);
  if (!tile)
  {
    printf("Can't Write Image!");
    return false;
  }
  GDALClose(pOutMEMDataset);
  pOutMEMDataset = nullptr;
  GDALClose(tile);
  tile = nullptr; 
  if (tileBuf)
  {
    delete[] tileBuf;
    tileBuf = nullptr;
  }
}

这里创建了一个画着对角线的JPG/PNG图像:

分类: GDAL

标签: Create , PNG , JPG , GDAL


相关文章
pdf文件转化为png照片 (PyMuPDF下面的fitz)
pdf文件转化为png照片 (PyMuPDF下面的fitz)
|
6月前
|
Web App开发 XML 存储
一篇文章讲明白JPG、PNG、GIF、SVG等格式图片区别
一篇文章讲明白JPG、PNG、GIF、SVG等格式图片区别
|
6月前
|
算法 计算机视觉 Python
【python工具】WebP格式转成JPG、PNG和JPEG
平时在网上搜索图片,另存为时常常遇到 WebP 格式,而非常见的 JPG、PNG、JPEG 格式,所以以此文记录一下WebP的读取和转换方法,希望对大家有所帮助!🥸
|
6月前
|
Java
JAVA读取EMF文件并转化为PNG,JPG,GIF格式
JAVA读取EMF文件并转化为PNG,JPG,GIF格式
359 0
|
图形学
Qt&Vtk-003-读取jpg、png、dicom等格式图片
本文其实才能算是真正的Qt与Vtk结合,具体实现JPG、PNG、TIFF、DICOM、BMP及一个3D Cube显示。
691 1
Qt&Vtk-003-读取jpg、png、dicom等格式图片
|
计算机视觉
将TIF图像格式转化为PNG或者JPG格式
安装好cv2库,如果没有安装,请使用pip install opencv-python进行安装。
246 0
RGB数据剪切后保存为JPG格式文件的代码(使用jpeglib)
RGB数据剪切后保存为JPG格式文件的代码(使用jpeglib)
160 0
|
Java 文件存储 Maven
将PDF文件转换成PNG图片
有这样一个业务场景:需要在 WEB 页面中浏览 PDF 文件,PDF 文件存储在 FTP 服务器上,即 PDF 文件对外提供的访问地址的协议是 ftp 的。有如下几个硬条件、软需求的要求: - WEB 页面本身的可视区域不是很大; - 不想弹出对话框展示 PDF 文件; - 谷歌浏览器不支持在 http 协议的页面里内嵌 ftp 协议的路径; - 在 WEB 页面中使用系统默认的 PDF 阅读器的体验不是很好,滚动条啦,边框啦。
319 0
|
C# 移动开发
将指定路径下的所有SVG文件导出成PNG等格式的图片(缩略图或原图大小)
原文:将指定路径下的所有SVG文件导出成PNG等格式的图片(缩略图或原图大小) WPF的XAML文档(Main.xaml):                                   CS代码:(Main.
1037 0