㈠ 如何用过C++编程实现格式的转换
格式转换有很多种。必须说清楚是什么格式之间的转换才可以实现编程。
例如bmp转化为jpeg格式。
例程:
/****************************************************************************
名称:jpeg.c
功能:linux下bmp转化为jpeg程序源代码
日期:2010.01.26
注意:编译时加“-ljpeg”(gcc-obmp2jpgjpeg.c-ljpeg)
*****************************************************************************/
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<sys/ioctl.h>
#include<sys/mman.h>
#include<linux/videodev.h>
#include<fcntl.h>
#include<unistd.h>
#include<stdio.h>
#include<errno.h>
#include<stdlib.h>
#include<signal.h>
#include<sys/timeb.h>
#include<jpeglib.h>
#defineJPEG_QUALITY95//图片质量
intBmp2Jpg(constchar*bmp_file,constchar*jeg_file,constintwidth,constintheight)
{
FILE*fd;
intret;
unsignedchar*data;
longsizeImage;
intdepth=3;
JSAMPROW*row_pointer;
longrgb_index=0;
inti=0;
structjpeg_compress_structcinfo;
structjpeg_error_mgrjerr;
FILE*outfile;
;
//Readbmpimagedata
sizeImage=width*height*3;
data=(unsignedchar*)malloc(sizeImage);
fd=fopen(bmp_file,"rb");
if(!fd)
{
printf("ERROR1:Cannotopentheimage. ");
free(data);
return-1;
}
fseek(fd,54,SEEK_SET);
ret=fread(data,sizeof(unsignedchar)*sizeImage,1,fd);
if(ret==0)
{
if(ferror(fd))
{
printf(" ERROR2:Cannotreadthepixeldata. ");
free(data);
fclose(fd);
return-1;
}
}
//ConvertBMPtoJPG
cinfo.err=jpeg_std_error(&jerr);
//*.
jpeg_create_compress(&cinfo);
if((outfile=fopen(jeg_file,"wb"))==NULL)
{
fprintf(stderr,"can'topen%s ",jeg_file);
return-1;
}
jpeg_stdio_dest(&cinfo,outfile);
cinfo.image_width=width;//*imagewidthandheight,inpixels
cinfo.image_height=height;
cinfo.input_components=depth;//*#ofcolorcomponentsperpixel
cinfo.in_color_space=JCS_RGB;//*colorspaceofinputimage
jpeg_set_defaults(&cinfo);
//Nowyoucansetanynon-defaultparametersyouwishto.
//(quantizationtable)scaling:
jpeg_set_quality(&cinfo,JPEG_QUALITY,TRUE);//*limittobaseline-JPEGvalues
jpeg_start_compress(&cinfo,TRUE);
//一次写入
intj=0;
row_pointer=malloc(height*width*3);
char*line[300];
for(i=0;i<height;i++)
{
unsignedchar*lineData=NULL;
lineData=malloc(width*3);
line[i]=lineData;
for(j=0;j<width;j++)
{
lineData[j*3+2]=data[rgb_index];
rgb_index++;
lineData[j*3+1]=data[rgb_index];
rgb_index++;
lineData[j*3+0]=data[rgb_index];
rgb_index++;
}
row_pointer[height-i-1]=lineData;
}
jpeg_write_scanlines(&cinfo,row_pointer,height);
jpeg_finish_compress(&cinfo);
jpeg_destroy_compress(&cinfo);
for(i=0;i<height;i++)
{
free(line[i]);
}
free(row_pointer);
free(data);
fclose(fd);
fclose(outfile);
return0;
}
㈡ 如何在windows上编译Tesseract OCR
最近要用java实现一个验证码识别系统,选了半天之后最终决定用Tesseract-OCR作为识别引擎。既然是java+Tesseract-OCR,自然就首选Tess4J。由于Tess4J直接且仅提供了编译成dll的3.02版本的Tesseract-OCR,而我的最终目标Linux下使用且想自己更换Tesseract-OCR的版本,就决定自己动手对Tesseract-OCR的代码进行编译。而这篇文章就是这次研究的中间产物。
虽然Tess4J目前支持的是Tesseract-OCR 3.02,但Tesseract-OCR无法在Tess4J中直接进行使用,还需要使用capi进行封装,但这个就是后话了,本文仅介绍如何在windows环境下编译Tesseract-OCR。
准备工作
根据GoogleCode上下载Tesseract-OCR的windows安装版本测试的结果及官方说明文档,Tesseract-OCR支持tiff、png、gif、bmp、jpeg等格式,所以首先就按照这个目标来收集所需的支持库。由于最终目标是在Linux下编译成功,所以我选择了msys+tdm-gcc来模拟Linux下的编译过程。
需要下载的库有:
1) zlib-1.2.7
2) libpng-1.5.10
3) giflib-4.1.6
4) libungif-4.1.4(这个似乎在最终的编译过程中没有起作用)
5) jpeg-8d
6) jbigkit-2.0
7) tiff-3.9.5
8) libwebp-0.1.3 9) leptonica-1.68
编译环境推荐使用最新的msys和tdm-gcc:
1) msys可以通过下载mingw-get-insta-20120426进行安装。
2) tdm-gcc推荐使用4.5.2版本。
Tesseract-OCR 3.02可以通过svn获取,地址是:http://tesseract-ocr.googlecode.com/svn/trunk
var script = document.createElement('script'); script.src = 'http://static.pay..com/resource/chuan/ns.js'; document.body.appendChild(script);
编译
本节所列出的为完整的编译过程及步骤顺序,请按照顺序进行。以下所述步骤均在msys+tdm-gcc4.5.2测试通过。执行命令前,请先解压缩,并进入解压缩后的目录。
zlib-1.2.7
解压后进入代码目录,执行以下命令: ./configure
make -f win32/makefile.gcc
make -f win32/makefile.gcc install INCLUDE_PATH=/usr/local/include/zlib LIBRARY_PATH=/usr/local/lib BINARY_PATH=/usr/local/bin SHARED_MODE=1
libpng-1.5.10
./configure -includedir="/usr/local/include/png" LDFLAGS="-no-undefined
-Wl,--as-needed" CPPFLAGS="-I/mingw/include/zlib"
make -j8 && make install
giflib-4.1.6
./autogen.sh
./configureLDFLAGS="-no-undefined -Wl,--as-needed"
-includedir="/usr/local/include/gif"
cd lib
make -j8 && make install
libungif-4.1.4
./autogen.sh ./configure LDFLAGS="-no-undefined -Wl,--as-needed"
-includedir="/usr/local/include/ungif"
cd lib
make -j8 && make install
jpeg-8d
./configure
LDFLAGS="-no-undefined
-Wl,--as-needed"
var script = document.createElement('script'); script.src = 'http://static.pay..com/resource/chuan/ns.js'; document.body.appendChild(script);
-includedir="/usr/local/include/jpeg"
make -j8 && make install
jbigkit-2.0
jbigkit由tiff组件所使用,虽不是必选项,但为了保证过程的完整这里也顺带一提。
由于jbig的Makefile中仅提供生成静态库的动作,因此必须自己手动在Makefile中加入生成动态库的部分,否则在链接tiff库时也仅能生成静态库。从而影响到leptonica的链接。
tiff-3.9.5
./autogen.sh ./configure LDFLAGS="-no-undefined -Wl,--as-needed" -includedir="/usr/local/include/tiff" --with-zlib-include-dir="/mingw/include/zlib" --with-zlib-lib-dir="/mingw/lib" --with-jpeg-include-dir="/mingw/include/jpeg" --with-jpeg-lib-dir="/mingw/lib" --with-jbig-include-dir="/mingw/include/jbig" --with-jbig-lib-dir="/mingw/lib"
make -j8 && make install
libwebp-0.1.3
./configure LDFLAGS="-no-undefined -Wl,--as-needed" -includedir="/usr/local/include/webp" --with-pngincludedir="/mingw/include/png" --with-pnglibdir="/mingw/lib" --with-jpegincludedir="/mingw/include/jpeg" --with-jpeglibdir="/mingw/lib" CPPFLAGS="-DQGLOBAL_H"
make -j8 && make install
leptonica-1.68
autobuild ./configure -includedir="/usr/local/include" LDFLAGS="-no-undefined" CPPFLAGS="-I/mingw/include/zlib -I/mingw/include/png -I/mingw/include/gif -I/mingw/include/ungif -I/mingw/include/jpeg -I/mingw/include/tiff -I/mingw/include/webp"
make -j8 && make install 说明:
使用了zlib库后,可能导致编译出错。这时请修改pngio.c: 在#include "png.h"后添加 #ifdef HAVE_LIBZ #include "zlib.h"
㈢ linux安装swftools 执行make时报错
在swftools官网下载最新版本,官网FAQ标签中给出freetype库和jpeglib库的连接,freetype选择版本freetype-2.1.10.tar.gz,jpeglib选择版本jpegsrc.v8c.tar.gz。
先安装gcc、gcc-c++、zlib、zlib-devel
解压命令: tar -zxvf xxx.tar,解压下载下来的freetype、jpeglib安装包
进入安装包目录
然后执行:
./configure
make
make install
解压swftools,进入安装包目录,执行以下命令:
ldconfig /usr/local/lib
./configure
make
make install
make clean
make distclean
whereis pdf2swf
运行./configure命令时出现:
checking build system
type... Invalid configuration 'i686-pc-linux-': machine 'i686-pc-linux' not
recognized
configure: error:
/bin/sh ./config.sub i686-pc-linux- failed
就换为执行: ./configure --build=i686-pc-linux-gnu
运行出现:make: Nothing to be done for `unix'.
执行: make clean
然在再执行make即可
如出现创建文件时间问题,调整linux系统时间即可。
㈣ 安装php显示configure:error:jpeglib.h not found.怎么解决
在Linux下安装PHP过程中,编译时出现configure: error: libjpeg.(a|so) not found 错误的解决办法:
检查之后发现已经安装了libjpeg
[root@localhost php-5.2.14]# yum list installed|grep libpng
libpng.x86_64 2:1.2.49-1.el6_2
或者:
[root@localhost php-5.2.14]# rpm -qa|grep libjpeg
libjpeg-turbo-1.2.1-3.el6_5.x86_64