精华内容
下载资源
问答
  • libpng安装与配置

    千次阅读 2017-02-26 20:58:39
    安装参考 http://www.bubuko.com/infodetail-354850.html http://www.cnblogs.com/lvrcbl/p/3962463.html http://www.xuebuyuan.com/1634014.html 二、编译 将下载的两个zip解压到同一目录下 打开...
    有些代码用到了

    安装参考

    二、编译

    将下载的两个zip解压到同一目录下

    打开ibpng目录下的projects\vstudio中的工程文件(低版本的VS可以打开projects\visualc71中的工程)。

    编译运行,在输出目录(Debug或Realse)中得到输出文件libpng16.dll、libpng16.lib、zlib.lib。

    三、创建工程

    创建一个工程,右键点击工程名打开Properties(属性)对话框

    在C/C++->General(常规)->Additional Include Directories(附加包含目录)中添加libpng目录

    在Linker->General(常规)->Additional Library Directories(附加库目录)中添加刚刚生成的lib文件所在的路径


    在Linker->Input(输入)->Additional Dependencies(附加依赖项)中添加libpng16.lib、zlib.lib两个文件



    出现png++/png.hpp错误
    解决方法:
    在环境变量Path添加D:\0Third-Party\lpng1626\projects\vstudio\Debug
    展开全文
  • 树莓派的libpng安装

    2017-02-09 09:01:07
    安装版本是libpng-1.6.26 正常安装,同libjpeg库一样,安装完成后编译时加上 -lpng17才能使用,另外需要执行 sudo ldconfig

    安装版本是libpng-1.6.26

    正常安装,同libjpeg库一样,安装完成后编译时加上 -lpng17才能使用,另外需要执行 sudo ldconfig

    展开全文
  • linux上安装libpng

    2015-12-01 13:15:08
    主要介绍了如何在centos上安装libpng
  • 上传的库文件在libpng\lpng1637\projects\vstudio\Debug中,头文件在libpng\lpng1637(使用时需要Include)
  • libpng 安装php时必备的文件 版本为 1.2.8
  • linux下libpng安装

    2020-08-04 23:25:24
    在linux安装libpng 首先在linux中下载libpng包,如果是虚拟机那么可以在主机上下载好再拷贝到虚拟机中 下载链接: https://sourceforge.net/projects/libpng/files/ 这里以libpng1.2.59为例 然后解压 解压后的...

    在linux安装libpng

    首先在linux中下载libpng包,如果是虚拟机那么可以在主机上下载好再拷贝到虚拟机中

    下载链接:
    https://sourceforge.net/projects/libpng/files/

    这里以libpng1.2.59为例
    在这里插入图片描述
    然后解压
    在这里插入图片描述

    解压后的文件夹如下:
    在这里插入图片描述
    进入libpng-1.2.59文件夹中:
    在这里插入图片描述
    打开该文件夹下的终端:
    在这里插入图片描述
    然后打开了一个终端窗口:
    在这里插入图片描述
    至此开始安装:
    第一步:输入命令 ./configure --prefix=路径
    这里以 /home/user2/Desktop/libpng-1.2.59 为例(加 –prefix=路径 的目的是避开之后命令所需要的root权限,如果你可以获得root权限并使用sudo命令,那么这一步你可以直接输入命令: ./configure
    在这里插入图片描述
    然后输入 make check
    在这里插入图片描述

    最后输入 make install(如果是第一步输入的命令是 ./configure ,那么这里需要修改,输入的命令变为:sudo make install
    在这里插入图片描述
    libpng安装完成

    展开全文
  • linux下libpng库的安装以及使用

    万次阅读 多人点赞 2018-08-31 19:49:03
    tar -xzvf libpng-1.6.26.tar.gz && cd libpng-1.6.26 #安装 ./configure make check sudo make install sudo ldconfig zlib: #解压: tar -xf zlib-1.2.11.tar.xz && cd zlib-1.2.11 #安装 ./configure sudo make ...

    前几天手里的智能锁项目 , 收到产品的建议(命令)说 , 就是人脸识别成功的时候 , 不要只显示摄像头捕捉到的图像 , 要弄个酷炫一点的背景, 背景里图片中间有个圆圈, 人脸就放到圆圈里也就是类似这样。。

    当然, 这是我思考了好几个小时的结果, 开始想不明白要怎么实现,其实想通了也很简单, 三个步骤

    A 把背景图像的RGB读出来 out_buf

    B 把摄像头采集到的图像读出来(分辨率和背景图像一样) , in_buf

    C 如果out_buf当前像素点是黑色不变, 否则填充in_buf到out_buf

    有了思路了 ,  就要付诸行动  , 花了好几个小时来了解了一下PNG图片的格式 , 又找到一个资料比较全的库 , 就各种找资料 , 把png的读写跑了一遍 ,  特意记录一下

    关于PNG文件格式这里不讨论 , 有兴趣的朋友直接百度"PNG文件格式"会得到自己想要的答案


    一: 安装PNG库文件

    因为PNG文件需要用到zlib进行编解码,  所以用到libpng的同时也需要zlib加密解密

    本文使用的是libpng版本和zlib版本如下:

    下载地址:

    https://sourceforge.net/projects/libpng/files/

    下载完之后如下命令顺序执行:

    libpng:
    #解压
    tar -xzvf libpng-1.6.26.tar.gz && cd libpng-1.6.26
    #安装
    ./configure
    make check
    sudo make install
    sudo ldconfig
    
    zlib:
    #解压:
    tar -xf zlib-1.2.11.tar.xz && cd zlib-1.2.11
    #安装
    ./configure 
    sudo make install
    sudo make
    

    安装成功如下图 :

    运行pkg-config libpng16 zlib --libs --cflags得到正确的头文件和链接库的位置

    二 : 使用libpng

    libpng有一套自己的流程如下:

    1:初始化png_structp结构体 (用于和打开的文件指针绑定)

    2:初始化png_infop结构体 (此结构体包含各种图片信息)

    3:设置错误返回点 (如果是Libpng内部出现错误, 则会跳到你设置的错误返回点处执行)

    4:绑定文件IO流到png_structp结构体 (打开的文件和png_structp结构体实例进行绑定)

    5:写入需要生成PNG图像的信息, 信息内容包括尺寸, 位深度,颜色类型,是否交错, 换行等等,按照格式逐个填写就行了

    6:写入实际的RGB数据到绑定好的png_structp结构体

    7:写入文件尾部信息

    8:清理工作 (释放申请的内存, 注销png_structp结构体)

    代码如下 :

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <png.h>
    
    
    #define PNG_BYTES_TO_CHECK	8
    #define HAVE_ALPHA			1
    #define NOT_HAVE_ALPHA		0
    
    typedef struct _pic_data pic_data;
    struct _pic_data {
    	int width, height; 	//长宽
    	int bit_depth; 	   	//位深度
    	int alpha_flag;		//是否有透明通道
    	unsigned char *rgba;//实际rgb数据
    };
    
    int check_is_png(FILE **fp, const char *filename) //检查是否png文件
    {
    	char checkheader[PNG_BYTES_TO_CHECK]; //查询是否png头
    	*fp = fopen(filename, "rb");
    	if (*fp == NULL) {
    		printf("open failed ...1\n");
    		return 0;
    	}
    	if (fread(checkheader, 1, PNG_BYTES_TO_CHECK, *fp) != PNG_BYTES_TO_CHECK) //读取png文件长度错误直接退出
    		return 0;
    	return png_sig_cmp(checkheader, 0, PNG_BYTES_TO_CHECK); //0正确, 非0错误
    }
    
    int decode_png(const char *filename, pic_data *out) //取出png文件中的rgb数据
    {
    	png_structp png_ptr; //png文件句柄
    	png_infop	info_ptr;//png图像信息句柄
    	int ret;
    	FILE *fp;
    	if (check_is_png(&fp, filename) != 0) {
    		printf("file is not png ...\n");
    		return -1;
    	}
    	printf("launcher[%s] ...\n", PNG_LIBPNG_VER_STRING); //打印当前libpng版本号
    
    	//1: 初始化libpng的数据结构 :png_ptr, info_ptr
    	png_ptr  = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); 
    	info_ptr = png_create_info_struct(png_ptr);
    
    	//2: 设置错误的返回点
    	setjmp(png_jmpbuf(png_ptr));
    	rewind(fp); //等价fseek(fp, 0, SEEK_SET);
    
    	//3: 把png结构体和文件流io进行绑定 
    	png_init_io(png_ptr, fp);
    	//4:读取png文件信息以及强转转换成RGBA:8888数据格式
    	png_read_png(png_ptr, info_ptr, PNG_TRANSFORM_EXPAND, 0); //读取文件信息
    	int channels, color_type; 
    	channels 	= png_get_channels(png_ptr, info_ptr); //通道数量
    	color_type 	= png_get_color_type(png_ptr, info_ptr);//颜色类型
    	out->bit_depth = png_get_bit_depth(png_ptr, info_ptr);//位深度	
    	out->width 	 = png_get_image_width(png_ptr, info_ptr);//宽
    	out->height  = png_get_image_height(png_ptr, info_ptr);//高
    	
    	//if(color_type == PNG_COLOR_TYPE_PALETTE)
    	//	png_set_palette_to_rgb(png_ptr);//要求转换索引颜色到RGB
    	//if(color_type == PNG_COLOR_TYPE_GRAY && out->bit_depth < 8)
    	//	png_set_expand_gray_1_2_4_to_8(png_ptr);//要求位深度强制8bit
    	//if(out->bit_depth == 16)
    	//	png_set_strip_16(png_ptr);//要求位深度强制8bit
    	//if(png_get_valid(png_ptr,info_ptr,PNG_INFO_tRNS))
    	//	png_set_tRNS_to_alpha(png_ptr);
    	//if(color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
    	//	png_set_gray_to_rgb(png_ptr);//灰度必须转换成RG
    	printf("channels = %d color_type = %d bit_depth = %d width = %d height = %d ...\n",
    			channels, color_type, out->bit_depth, out->width, out->height);
    
    	int i, j, k;
    	int size, pos = 0;
    	int temp;
    	
    	//5: 读取实际的rgb数据
    	png_bytepp row_pointers; //实际存储rgb数据的buf
    	row_pointers = png_get_rows(png_ptr, info_ptr); //也可以分别每一行获取png_get_rowbytes();
    	size = out->width * out->height; //申请内存先计算空间
    	if (channels == 4 || color_type == PNG_COLOR_TYPE_RGB_ALPHA) { //判断是24位还是32位
    		out->alpha_flag = HAVE_ALPHA; //记录是否有透明通道
    		size *= (sizeof(unsigned char) * 4); //size = out->width * out->height * channel
    		out->rgba = (png_bytep)malloc(size);
    		if (NULL == out->rgba) {
    			printf("malloc rgba faile ...\n");
    			png_destroy_read_struct(&png_ptr, &info_ptr, 0);
    			fclose(fp);
    			return -1;
    		}
    		//从row_pointers里读出实际的rgb数据出来
    		temp = channels - 1;
    		for (i = 0; i < out->height; i++) 
    			for (j = 0; j < out->width * 4; j += 4) 
    				for (k = temp; k >= 0; k--)
    					out->rgba[pos++] = row_pointers[i][j + k];
    	} else if (channels == 3 || color_type == PNG_COLOR_TYPE_RGB) { //判断颜色深度是24位还是32位
    		out->alpha_flag = NOT_HAVE_ALPHA;
    		size *= (sizeof(unsigned char) * 3);
    		out->rgba = (png_bytep)malloc(size);
    		if (NULL == out->rgba) {
    			printf("malloc rgba faile ...\n");
    			png_destroy_read_struct(&png_ptr, &info_ptr, 0);
    			fclose(fp);
    			return -1;
    		}
    		//从row_pointers里读出实际的rgb数据
    		temp = (3 * out->width);
    		for (i = 0; i < out->height; i ++) {
    			for (j = 0; j < temp; j += 3) {
    				out->rgba[pos++] = row_pointers[i][j+2];
    				out->rgba[pos++] = row_pointers[i][j+1];
    				out->rgba[pos++] = row_pointers[i][j+0];
    			}
    		}
    	} else return -1; 
    	//6:销毁内存
    	png_destroy_read_struct(&png_ptr, &info_ptr, 0);
    	fclose(fp);
    	//此时, 我们的out->rgba里面已经存储有实际的rgb数据了
    	//处理完成以后free(out->rgba)
    	return 0;
    }
    
    int RotationRight90(unsigned char * src, int srcW, int srcH, int channel) //顺时针旋转90度
    {
    	unsigned char * tempSrc = NULL; //临时的buf用来记录原始的图像(未旋转之前的图像)
    	int mSize = srcW * srcH * sizeof(char) * channel;
    	int i = 0;
    	int j = 0;
    	int k = 0;
    	int l = 3;
    	int desW = 0;
    	int desH = 0;
    
    	desW = srcH;
    	desH = srcW;
    
    	tempSrc = (unsigned char *)malloc(sizeof(char) * srcW * srcH * channel);
    	memcpy(tempSrc, src, mSize); //拷贝原始图像至tempbuf
    	for(i = 0; i < desH; i ++)
    	{
    		for(j = 0; j < desW; j ++)
    		{
    			for(k = 0; k < channel; k ++)
    			{
    				src[(i * desW + j) * channel + k] = tempSrc[((srcH - 1 - j) * srcW + i) * channel + k]; //替换像素
    			}
    		}
    	}
    	free(tempSrc);
    	return 0;
    }
    
    int write_png_file(const char *filename , pic_data *out) //生成一个新的png图像
    {
    	png_structp png_ptr;
    	png_infop 	info_ptr;
    	png_byte color_type;
    	png_bytep * row_pointers;
    	FILE *fp = fopen(filename, "wb");
    	if (NULL == fp) {
    		printf("open failed ...2\n");
    		return -1;
    	}
    	//1: 初始化libpng结构体  
    	png_ptr	= png_create_write_struct(PNG_LIBPNG_VER_STRING, 0, 0, 0);
    	if (!png_ptr) {
    		printf("png_create_write_struct failed ...\n");
    		return -1;
    	}
    	//2: 初始化png_infop结构体 , 
    	//此结构体包含了图像的各种信息如尺寸,像素位深, 颜色类型等等
    	info_ptr = png_create_info_struct(png_ptr);
    	if (!info_ptr) {
    		printf("png_create_info_struct failed ...\n");
    		return -1;
    	}
    	//3: 设置错误返回点
    	if (setjmp(png_jmpbuf(png_ptr))) {
    		printf("error during init_io ...\n");
    		return -1;
    	}
    	//4:绑定文件IO到Png结构体
    	png_init_io(png_ptr, fp);
    	if (setjmp(png_jmpbuf(png_ptr))) {
    		printf("error during init_io ...\n");
    		return -1;
    	}
    	if (out->alpha_flag == HAVE_ALPHA) color_type = PNG_COLOR_TYPE_RGB_ALPHA;
    	else color_type = PNG_COLOR_TYPE_RGB;
    	//5:设置以及写入头部信息到Png文件
    	png_set_IHDR(png_ptr, info_ptr, out->width, out->height, out->bit_depth,
    	color_type, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
    	png_write_info(png_ptr, info_ptr);
    	if (setjmp(png_jmpbuf(png_ptr))) {
    		printf("error during init_io ...\n");
    		return -1;
    	}
    	int channels, temp;
    	int i, j, pos = 0;
    	if (out->alpha_flag == HAVE_ALPHA) {
    		channels = 4;
    		temp = (4 * out->width);
    		printf("have alpha ...\n");
    	} else {
    		channels = 3;
    		temp = (3 * out->width);
    		printf("not have alpha ...\n");
    	}
    	// 顺时针旋转90度 , 旋转完了一定要把width 和height调换 不然得到的图像是花的  旋转三次就是逆时针旋转一次
    	//RotationRight90(out->rgba, out->width, out->height, channels);
    	//RotationRight90(out->rgba, out->height, out->width, channels);
    	//RotationRight90(out->rgba, out->width, out->height, channels);
    	row_pointers = (png_bytep*)malloc(out->height * sizeof(png_bytep));
    	for (i = 0; i < out->height; i++) {
    		row_pointers[i] = (png_bytep)malloc(temp* sizeof(unsigned char));
    		for (j = 0; j < temp; j += channels) {
    			if (channels == 4) {
    				row_pointers[i][j+3] = out->rgba[pos++];
    				row_pointers[i][j+2] = out->rgba[pos++];
    				row_pointers[i][j+1] = out->rgba[pos++];
    				row_pointers[i][j+0] = out->rgba[pos++];
    			} else {
    				row_pointers[i][j+2] = out->rgba[pos++];
    				row_pointers[i][j+1] = out->rgba[pos++];
    				row_pointers[i][j+0] = out->rgba[pos++];
    			}
    		}
    	}
    	//6: 写入rgb数据到Png文件
    	png_write_image(png_ptr, (png_bytepp)row_pointers);
    	if (setjmp(png_jmpbuf(png_ptr))) {
    		printf("error during init_io ...\n");
    		return -1;
    	}
    	//7: 写入尾部信息
    	png_write_end(png_ptr, NULL);
    	//8:释放内存 ,销毁png结构体
    	for (i = 0; i < out->height; i ++)
    		free(row_pointers[i]);
    	free(row_pointers);
    	png_destroy_write_struct(&png_ptr, &info_ptr);
    	fclose(fp);
    	return 0;
    }
    
    int main(int argc, char **argv)
    {
    	pic_data out;
    	if (argc == 3) {
    		decode_png(argv[1], &out);
    		write_png_file(argv[2], &out);
    		free(out.rgba);
    	} else {
    		puts("please input two file, \nargv[1]:source.png argv[2]:dest.png");	
    	}
    	return 0;
    }
    

    编译需要链接已经安装好的libpng 和 zlib库

    gcc test.c `pkg-config libpng16 zlib --libs --cflags` 

    功能就是简单得读取PNG格式图片, 再生成(写入)一个新的一模一样的图片 ,  代码中把图片旋转注释了 , 亲测也是可用的。

    最后送上一张随便百度的PNG格式图片, 还有一张就是项目的图片(无视本人)

     

    展开全文
  • ubuntu 或者 debian 安装 libpng

    千次阅读 2019-06-10 15:54:57
    安装命令: apt-get install libpng12-dev zlib1g-dev 或者: apt-get install libpng-dev 日志: # apt-get install libpng-dev Reading package lists... Done Building dependency tree Reading state ...
  • mac 环境安装Libpng

    千次阅读 2017-07-26 10:13:32
    安装Libpng 之前要先运行下 brew install xz 否则会报错 如果运行brew install xz 报错 是因为 /usr/local/include 和 /usr/local/lib 这两个目录没有写入权限,所以给这两个目录写入权限就可以了 
  • mac下安装libpng环境

    千次阅读 2019-10-04 14:42:33
    用go写一个爬虫工具时需要使用一个go的库,而这个库有需要使用libpng库,不然编译就会提示说 png.h找不到等之类的信息,于是想到应该和windows一样需要安装gcc环境,然后让gcc里安装libpng这个库, 解决办法: ...
  • linux上安装libpng库以及zlib库

    千次阅读 2019-11-09 09:33:19
    至此,libpng已经成功安装并配置好,在编译c或cpp文件时,只需要加上pkg-config libpng15 --libs –cflags 即可成功连接libpng库; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 下面我们来安装zlib库...
  • libpng安装时出现的问题

    千次阅读 2009-04-30 15:57:00
    因为安装系统的时候是最小安装,所以编译服务的时候需要一些软件支持,具体需要以下RPM包,这些都可以在CentOS安装盘里找到:glibc-kernheaders-2.4-9.1.98.EL.x86_64.rpm(在第二张碟)glibc-headers-2.3.4-2.19....
  • win7+VS2010安装libpng

    千次阅读 2018-05-07 23:38:27
    新建lines_libpng 项目,设置: MITOpenCourseware示例代码: #include #include #define PNG_SETJMP_NOT_SUPPORTED #include #define WIDTH 256 #define HEIGHT 32 #define COLOR_DEPTH 8 struct Pixel { ...
  • 安装libpng报错zlib not installed

    千次阅读 2019-01-13 20:20:38
    libpng安装configure时报错 error: ZLib not installed 两个原因 zlib的include和lib路径没找到 添加zlib路径到环境变量,在./configure就行了 #export LDFLAGS="-L/usr/local/zlib/lib" #export ...
  • VS 安装配置libpng和libjpeg

    千次阅读 2018-05-22 19:14:43
    http://www.cnblogs.com/dzyBK/p/4999180.htmlhttp://zlib.net/https://www.cnblogs.com/wang985850293/p/6349399.html
  • ubuntu16.04安装libpng zlib png++

    千次阅读 2018-01-31 13:16:40
    首先安装libpng和zlib1.2.11,下载地址:点击打开链接install method:http://blog.csdn.net/bawenmao/article/details/50052963test config methods:jennifer@jennifer-pc:~$ pkg-config libpng12 --libs --cflags...
  • 安装libpng需要依赖zlib库,在安装完zlib之后,配置libpng的时候输入下列命令: ./configure --host=arm-linux --prefix=$PWD/temp_install LIBS=-L/usr/local/lib CPPFLAGS=-I/usr/local/include 其中LIBS和...
  • 目录1、libjpeg库移植2、zlib库移植3、libpng库移植4、开源库的使用方法 1、libjpeg库移植 【1】下载源码与准备交叉工具链 libjpegv6下载地址 【2】解压源码并进入解压后的目录 【3】配置 ./configure --prefix=/...
  • Libpng的编译和安装

    万次阅读 2014-08-27 16:55:30
    Libpng的编译和安装 # 下载 wget http://hivelocity.dl.sourceforge.net/project/libpng/libpng15/older-releases/1.5.15/libpng-1.5.15.tar.gz # 解压 tar xvzf libpng-1.5.15.tar.gz && cd libpng-...
  • 安装libpng

    2018-12-29 13:12:00
    安装libpng库前需要先安装zlib库,libpng库依赖zlib库 1.1.zlib库安装 1.1.1. 下载地址:http://www.zlib.net/ 1.1.2. 解压后得到zlib-1.2.8文件夹(视版本而不同) jpeg-9 libpng-1.6.7 zlib-1.2.8 jpegsrc...
  • 文章目录1、官网下载和介绍2、libpng安装3、使用方法 1、官网下载和介绍 libpng官网 最新Release版本: libpng-1.6.37 PNG (Portable Network Graphics):可便携网络图片 2、libpng安装 libpng的安装之前需要先...
  • libpng-1.2.12.tar.gz安装与移植

    千次阅读 2016-10-13 17:52:04
    很多时候我们安装工具包会报错,原因是缺少这个库文件,此时我们就应该安装它,不同的平台用不同的编译工具,本次编译在arm平台上,写本文档的初衷在于我在移植qrencode工具时需要用到该库。准备工作 linux环境:...
  • 主要介绍了在Ubuntu 16.10安装mysql workbench报未安装软件包 libpng12-0错误的解决方法的相关资料,需要的朋友可以参考下
  • 今天在安装PHP的时候../configure --prefix=/usr/local/php5 --with-gd --with-zlib --with-mysql=/usr/local/mysql/ --with-config-file-path=/usr/local/php5 --enable-mbstring --enable-fpm先是报出如下错误:...
  • 【C】libpng的使用

    千次阅读 2017-07-17 16:10:27
    参考资料: Writing PNG Images (PNG: The Definitive Guide) Reading PNG Images (PNG: The Definitive Guide)我要讲的三个大部分分别是: ...3、怎样借助libpng读写PNG文件1、libpng是什么? libpng是一款C语言编写的
  • 在centos7安装wps时遇到libpng12.so.0()(64bit)问题后就开始各种找包,然后就还是各种依赖,最后在http://rpmfind.net/linux/rpm2html/search.php?query=libpng12.so.0()(64bit)找到了libpng12-1.2.50-10.el7.x86_64...
  • libpng和zlib配置 Win10 VS2017

    千次阅读 2019-05-30 10:21:49
    选择zlib-1.2.8.tar.gz和libpng-1.6.21.tar.gz这两个版本最合适。 vs2017中需要配置release版x64,然后重新生成。 下面是上面两个链接打开不了的操作: zlib-1.2.8.tar.gz:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,774
精华内容 13,909
关键字:

libpng安装