登录 用户中心() [退出] 后台管理 注册
 

热门搜索:
您的位置:首页 >> 马上代码 >> 马上代码 >> 主题: [gd库]gdImageCopyResized 的效果实现太差
标题 [gd库]gdImageCopyResized 的效果实现太差
clq
浏览(2417) 2008-01-19 22:10:57 发表 编辑

关键字:

[gd库]gdImageCopyResized 的效果实现太差

换 gdImageCopyResampled 要好得多。

//为了效率要用 gdFree 释放返回值
char * resize_image(const std::string fn, int new_W, int new_H, int & size)
{

FILE * old_fp = NULL;
FILE * new_fp = NULL;
gdImagePtr old_im, new_im; //图片旧、新图片句柄

char * old_fn = (char *)fn.c_str();//"C:\\Documents and Settings\\Administrator\\桌面\\1.jpg";
//char * old_fn = "C:\\Documents and Settings\\wilson\\桌面\\1.jpg";


//char * new_fn = "C:\\Documents and Settings\\Administrator\\桌面\\2.jpg";
//int A4_W = new_W;//40;//?
//int A4_H = new_H;//40;//?
//int new_W = 100;//新宽度
//int new_H = 100;//新高度
char * data = NULL;

log_cur(log_file);
//缩放//能否保存在内存中
if((old_fp=fopen(old_fn, "rb"))!=NULL)
{ //打开原图片文件
log_cur(log_file);
old_im=gdImageCreateFromJpeg(old_fp);//取得原图片句柄

log_cur(log_file);
if (old_im == NULL)
return NULL;
log_cur(log_file);

//计算高度//临时

//old_im->sx;//宽度
//old_im->sy;//高度

new_H = new_W * (((double)old_im->sy)/(double)(old_im->sx));

//计算高度//临时 _end;

//一定要销毁旧图片,以免内存泄露
fclose(old_fp);
//放在后面//gdImageDestroy(old_im);

//new_im = gdImageCreate(A4_W,A4_H); //创建新图片,取得句柄
// new_im = gdImageCreate(new_W, new_H); //创建新图片,取得句柄
new_im = gdImageCreateTrueColor(new_W, new_H); //创建新图片,取得句柄


//int white = gdImageColorAllocate(new_im, 255, 255, 255); //白色,做背景色
//int black = gdImageColorAllocate(new_im, 0, 0, 0); //黑色,做前景色

//gdImageCopyResized 的效果大家都说不好
// gdImageCopyResized(new_im,old_im,0,0,0,0,new_W,new_H,old_im->sx,old_im->sy);//复制并缩放图片,new_W,new_H,新图片的宽高
gdImageCopyResampled(new_im,old_im,0,0,0,0,new_W,new_H,old_im->sx,old_im->sy);//复制并缩放图片,new_W,new_H,新图片的宽高
/*
if((new_fp=fopen(new_fn,"wb"))!=NULL)
{ //打开新文件
gdImageJpeg(new_im,new_fp,-1); //输出图片到文件
fclose(new_fp);
};
fclose(old_fp);
*/
//data = (char *) gdImagePngPtr(new_im, &size);
data = (char *) gdImageJpegPtr(new_im, &size, -1);//最后一个参数是什么意思?

if (!data)
{
//Error
return NULL;
}


};
log_cur(log_file);


//一定要销毁旧图片,以免内存泄露
//fclose(old_fp);
//放在后面//
gdImageDestroy(old_im);
gdImageDestroy(new_im);//这个会不会导致 data 失效呢?


return data;
//注意外层函数一定要调用这个//gdFree(data);

}


总数:0 页次:1/0 首页 尾页  


发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:




Copyright © 2005-2012 CLQ工作室, All Rights Reserved

CLQ工作室 版权所有