<?php
define(”op_to_file”, 1); // output to file
define(”op_output”, 2); // output to browser
define(”op_not_keep_scale”, 4); // free scale
define(”op_best_resize_width”, 8); // scale to width
define(”op_best_resize_height”, 16); // scale to height
define(”cm_default”,0); // clipping method: default
define(”cm_left_or_top”,1); // clipping method: left or top
define(”cm_middle”,2); // clipping method: middle
define(”cm_right_or_bottom”,3); // clipping method: right or bottom
/**
* vxresize
*
* @param string $srcfile source file
* @param string $srcfile destination file
* @param int $dstw width of destination file (pixel)
* @param int $dsth height of destination file (pixel)
* @param int $option options, you add multiple options like 1+2(or 1|2), this utilize function 1 & 2
* 1: default,output to file 2: output to browser stream 4: free scale
* 8:scale to width 16:scale to height
* @param int $cutmode clipping method 0: default 1: left or top 2: middle 3: right or bottom
* @param int $startx start x axis (pixel)
* @param int $starty start y axis (pixel)
* @return array return[0]=0: ok; return[0] error code return[1] string: error description
*/function vxresize($srcfile, $dstfile) {
$option=op_to_file ;
$cutmode=cm_left_or_top ;
$dstw=22; //输出文件宽
$dsth=22; //输出文件高
$startx=0;
$starty=0;
$img_type = array(1=>”gif”, 2=>”jpeg”, 3=>”png”);
$type_idx = array(”gif”=>1, “jpg”=>2, “jpeg”=>2, “jpe”=>2, “png”=>3);if (!file_exists($srcfile)) {
return array(-1, “source file not exists: $srcfile.”);
}$path_parts = @pathinfo($dstfile);
$ext = strtolower ($path_parts["extension"]);
if ($ext == “”) {
return array(-5, “can’t detect output image’s type.”);
}
$func_output = “image” . $img_type[$type_idx[$ext]];
if (!function_exists ($func_output)) {
return array(-2, “function not exists for output:$func_output.”);
}
$data = @getimagesize($srcfile);
$func_create = “imagecreatefrom” . $img_type[$data[2]];
if (!function_exists ($func_create)) {
return array(-3, “function not exists for create:$func_create.”);
}
$im = @$func_create($srcfile);
$srcw = @imagesx($im);
$srch = @imagesy($im);
$srcx = 0;
$srcy = 0;
$dstx = 0;
$dsty = 0;
if ($option & op_best_resize_width) {
$dsth = round($dstw * $srch / $srcw);
}
if ($option & op_best_resize_height) {
$dstw = round($dsth * $srcw / $srch);
}
$fdstw = $dstw;
$fdsth = $dsth;
if ($cutmode != cm_default) { // clipping method 1: left or top 2: middle 3: right or bottom
$srcw -= $startx;
$srch -= $starty;
if ($srcw*$dsth > $srch*$dstw) {
$testw = round($dstw * $srch / $dsth);
$testh = $srch;
} else {
$testh = round($dsth * $srcw / $dstw);
$testw = $srcw;
}
switch ($cutmode) {
case cm_left_or_top: $srcx = 0; $srcy = 0; break;
case cm_middle: $srcx = round(($srcw - $testw) / 2);
$srcy = round(($srch - $testh) / 2); break;
case cm_right_or_bottom: $srcx = $srcw - $testw;
$srcy = $srch - $testh;
}
$srcw = $testw;
$srch = $testh;
$srcx += $startx;
$srcy += $starty;
} else {
if (!($option & op_not_keep_scale)) {
if ($srcw*$dsth>$srch*$dstw) {
$fdsth=round($srch*$dstw/$srcw);
$dsty=floor(($dsth-$fdsth)/2);
$fdstw=$dstw;
} else {
$fdstw=round($srcw*$dsth/$srch);
$dstx=floor(($dstw-$fdstw)/2);
$fdsth=$dsth;
}
$dstx=($dstx<0)?0:$dstx;
$dsty=($dstx<0)?0:$dsty;
$dstx=($dstx>($dstw/2))?floor($dstw/2):$dstx;
$dsty=($dsty>($dsth/2))?floor($dsth/s):$dsty;
}
}
if( function_exists(”imagecopyresampled”) and
function_exists(”imagecreatetruecolor”) ){
$func_create = “imagecreatetruecolor”
$func_resize = “imagecopyresampled”
} else {
$func_create = “imagecreate”
$func_resize = “imagecopyresized”
}
$newim = @$func_create($dstw,$dsth);
$black = @imagecolorallocate($newim, 0,0,0);
$back = @imagecolortransparent($newim, $black);
@imagefilledrectangle($newim,0,0,$dstw,$dsth,$black);
@$func_resize($newim,$im,$dstx,$dsty,$srcx,$srcy,$fdstw,$fdsth,$srcw,$srch);
if ($option & op_to_file) {
switch ($type_idx[$ext]) {
case 1:
case 3:
@$func_output($newim,$dstfile);
break;
case 2:
@$func_output($newim,$dstfile,100);
break;
}
}
if ($option & op_output) {
if (function_exists(”headers_sent”)) {
if (headers_sent()) {
return array(-4, “http already sent, can’t output image to browser.”);
}
}
header(”content-type: image/” . $img_type[$type_idx[$ext]]);
@$func_output($newim);
}
@imagedestroy($im);
@imagedestroy($newim);
return array(0, “ok”);
}
?>
Archive for the ‘Discuz’ Category
discuz 生成缩络图的函数代码
Tuesday, October 3rd, 2006mysql数据库自带的导入导出工具 mysqldump 的使用
Sunday, October 1st, 2006为了国庆期间论坛升级,我把数据库下载到本地[顺便备份],并调试论坛。服务器[mysql4.1]的空间平台有一个数据库备份功能,将备份文件下载,70m左右的数据。修改了本地的php.ini的最大上传字节和最大提交字节为100m,修改phpmyadmin 的config.inc.php里的超时为3600s,为的就是在本地倒入这个备份文件。但是,让人失望,phpmyadmin显然不能在数据里导入体积很大的单一.sql文件。点击导入,机器 cpu 100%,卡了几十分钟,在装态栏下面的进度条还没到20%,比dz的后台分卷导入效果还要差。只得另换思路。看看这个70m的.sql是用什么备份的。用editlus打开文件。在文件头部出现 mysql dump 10.9, 不知道这是什么东西,搜一下吧。原来是 mysql自带的备份工具。在本地g:\www\mysql5\bin找到了mysqldump.exe,点击出来一个dos窗口,又自动关闭了。再去百度,搜到的一大窜使用帮助,都是 mysqldump –help 出来的英文帮助。 还是自己动手吧。 通过多次测试,总结以下相关。mysqldump是mysql自带的备份工具,mysql则可以导入备份数据1.导出数据的方法
2.首先是打开dos窗口 [点击 开始-->运行-->输入 cmd 回车]
在dos下进入mysql 的 bin 目录 g:\www\mysql5\bin [这是我的调试环境,不是每个人的都一样]
3.在dos提示符后输入 mysqldump –user=root –passowrd –opt discuz > discuz061001.sql
// root 是用户名 disucz 是数据库名 discuz061001.sql 是导出来的文件的名字
回车
根据提示输入 password 回车
这里候就开始备份了,备份成功候会回到命令提示符。我们从windows下打开 g:\www\mysql5\bin 发现多了一个 discuz061001.sql 这个文件就是我们的备份了。导入数据的方法,将上面的第3步改成 mysql –user=root –password discuz < discuz061001.sql提醒:要注意 discuz061001.sql 是相对路径,如果你的sql文件不是存放在 g:\www\mysql5\bin 下的, 必须更改为绝对路径 [学一点dos是多么的重要]要学习更多的 mysqldump 或者是 mysql 函数,只要输入 mysqldump –help 或者是 mysql –help 就可以了。
Discuz显示作者略缩头像的插件
Sunday, October 1st, 2006第一次写discuz的插件。原来的插件在forumdisplay调用了头像,但是按一个头像20k来算,一页列表有30个主题,打开此页面需要加载600+,这样的插件没几个人敢装了。修改的文件:
memcp.php
forumdisplay.php
forumdisplay.html
新增一个
avatar_s.inc.php
函数来生成略缩图文件。参考了v2ex.com和日光海岸的代码,于是有了在DZ发的两篇帖子,对于不怎么搞这种东西的人来说,真的很累,每个函数都是翻手册,每个代码都要检查。尽管如此,东西还是很粗糙。
下面是在DZ的两篇帖子的地址,一个是FOR DZ5.0 一个是FOR DZ5.5
http://www.discuz.net/thread-417255-1-1.html for DZ5.0
http://www.discuz.net/thread-583064-1-1.html for DZ5.5
mysql 数据库管理工具
Wednesday, September 13th, 2006
上次有朋友问我有没有什么好的数据库管理工具,实际上我一般只用phpmyadmin就足够了以前还有fainsun_sql数据库备份工具进行备份,但是因为mysql4.1以后dz容易出现乱码问题,现在干脆就有dz的后台进行数据库的升级和备份,效果很不错,就是有点慢.
- phpmyadmin:这个大家应该不会陌生,基于 web 界面、功能比较强悍的 mysql 管理工具。
- mysql users:基于 web 界面、创建并维护 mysql 用户的工具。
- myclient:mysql 数据库的 web 客户端,提供多重分页界面、连接到多个数据库等特性。
- webmysql:同样基于 web 界面,支持 sql 查询、清空数据库和表、以及导入/导出文件等功能。
- mysql administrator:mysql 数据库可视化管理工具。
- mysql query browser:用于创建、执行及优化 sql 查询的可视化工具。
- gnome mysql client:以简单、快速、强大的方式访问 mysql 数据库,可更改或创建数据库数据。
- webmin module for mysql:允许设置数据库、表及 mysql 使用权限。
apache1.3.3+php4.4.2+mysql4.0+zend2+gd2成功安装
Saturday, May 13th, 2006以前用的都是微米的天空的套件,一键安安使用。但是微米好像最近站关了。想到还是自己学习一下安装调试环境。
开始几次总是找不到要点。不是这里出错。就是那里出错。资料倒是看了蛮多的。但是还是让人头晕的那种。
郁闷中碰到了落伍色猪[iprober的作者:tahiti],在他的指点下顺利安装好b了apache1.3.3+php4.4.2+mysql4.0+zend2+gd2成功安装,除了tt仍然需要用ip安装外,基本上达到了自己想要的效果。特此感谢。今天很忙,所以只把这些话简单的话说一下。以后再认真的把过程以及需要的事项逐一写出来 。