2009-03-31

在Symfony中使用第三方图片处理工具WideImage

类归于: PHP, symfony — 标签:, , , maker @ 14:01

最近在整理php的一些库,同时也在研究图片处理的相关功能,所以就发现了WideImage, 虽然是很强大的一个图片处理库,但貌似在国内没有很多人知道。

看了网上很多的图片处理类,功能也就是简单的水印和缩略图,这些WideImage都不在话下,在WideImage源代码中的demos里,我们可以看到转换灰度图,反色,遮罩(Mask)处理,通道(Channels)处理,水印,滤镜,缩放,旋转,翻转和Canvas(我理解也就是在图片上写字)等等功能。

下面简单记录一下如何将WideImage用在symfony中。

首先我们去WideImage的主页(http://wideimage.sourceforge.net/)下载源码包,解包之后会有三个目录,lib,tests,demos,lib是库文件,tests是测试文件,demos中是作者提供的代码示例,可以直接运行访问,要在symfony中使用WideImage,只要将lib目录放在项目的lib目录中就可以。

下面是一些简单的例子:

/**
* 遮罩处理
*/
public function executeMask(sfWebRequest $request)
{
$dir = sfConfig::get('sf_web_dir').DIRECTORY_SEPARATOR.'images'.DIRECTORY_SEPARATOR;
$img = wiImage::load($dir.'test.gif');
$mask = wiImage::load($dir.'m.gif');
$img->applyMask($mask, 0, 0)->saveToFile($dir.'mask.png');
return sfView::NONE;
}

/**
* 过滤器和格式转换
*
*/
public function executeFilter(sfWebRequest $request)
{
$dir = sfConfig::get('sf_web_dir').DIRECTORY_SEPARATOR.'images'.DIRECTORY_SEPARATOR;
$img = wiImage::load($dir.'test.gif');
$img->applyFilter(IMG_FILTER_GRAYSCALE, 111, 222, 111)->saveToFile($dir.'filter.png');
return sfView::NONE;
}

/**
* 缩放
*/
public function executeResize(sfWebRequest $request)
{
$dir = sfConfig::get('sf_web_dir').DIRECTORY_SEPARATOR.'images'.DIRECTORY_SEPARATOR;
$img = wiImage::load($dir.'test.jpg');
$img->resize(100, '30%', 'fill')->saveToFile($dir.'resizefill.jpg');
$img->resize(100, '30%', 'inside')->saveToFile($dir.'resizeinside.jpg');
$img->resize(100, '30%', 'outside')->saveToFile($dir.'resizeoutside.jpg');
return sfView::NONE;
}

/**
* 文字水印
*/
public function executeFont(sfWebRequest $request)
{
$dir = sfConfig::get('sf_web_dir').DIRECTORY_SEPARATOR.'images'.DIRECTORY_SEPARATOR;
$img = wiImage::load($dir.'test.jpg');
/*
在图片上输出中文的问题困扰了我很久,有些字体始终是乱码,这里使
用的是方正仿宋简体,可以正常输出UTF-8编码的中文简体字符串。
*/
$font = $dir.'fzfsjt.ttf';
$text = '你好';
$canvas = $img->getCanvas();
$canvas->setFont(new wiFont_TTF($font, 10, $img->allocateColor(0,0,255)));
// 参数 x y text angel
$canvas->writeText(60, 50, $text, 0);
$img->saveToFile($dir.'font.png');
return sfView::NONE;
}

更多的示例请查阅WideImage的主页(http://wideimage.sourceforge.net/)或者查看demos。

2009-03-26

如何在WINDOWS下设置SYMFONY1.2

类归于: symfony — 标签:, kthiz2006 @ 16:24

1. SVN SYMFONY
1. svn http://svn.symfony-project.com/branches/1.2
2. 设置PHP环境变量
1. 设置系统的 path 将 php.exe 的目录添加到path中,这样就可以用 php symfony 来运行命令
3. 安装pear
1. cmd 下运行  go-pear.bat
2. pear upgrade-all 将pear 升级到最新版
1. 过程中可能会报内存不足的错,自行修改php.ini 的设置 可以解决
4. 设置虚拟机
1. 需要打开rewrite功能
2.
DocumentRoot “d:/wamp/www/sftest/web”
ServerName sftest
alias /sf “d:/symfony1.2/data/web/sf/”

AllowOverride All
Allow from All


AllowOverride All
Allow from All


5. 设置php扩展
1. xsl 扩展需要打开
2. mysqlpdo需要打开
3. domxml扩展需要屏闭掉,否则会影响symfony解析xml
6. 以 php d:\symfony1.2\data\bin\symfony init-proj sftest 的形式 来使用命令行(因为symonfy文件命的不同,地址也会不同) 或将 symfony 命令所在目录设在PATH 里 就可以直接通过 symfony init-proj sftest 这样的办法执行命令了(这一办法在1.1的时候行不通,在1.2下测试通过.

2009-03-24

Add table prefix in symfony-在symfony中使用表前缀

类归于: symfony — 标签:, , , maker @ 16:51

The propel 1.3 is support table prefixes.

In your config/propel.ini add the following:

propel.tablePrefix=prefix_

then run the propel:build-all-load task.

Done!

网上找不到任何关于symfony或者propel支持表前缀的资料,只在propel1.3的修改历史中发现了1.3是支持表前缀的,但文档却没有更新相关内容,无奈之下只能查看源码,最后终于让我找到了。

补遗:还有一种方法我觉得是更加可靠的,那就是手动修改schema.yml中的全部数据库名,手动加前缀,同时强制设定表的phpName保证其不会随着表名一同变化,然后重新./symfony propel:build-all

2009-03-23

FreeBSD7.10通过ports安装lamp

类归于: Linux, symfony — 标签:, maker @ 13:20

最近终于逼着自己装了一个FreeBSD7.10, 第一次用,弄得一团糟,第一天研究了一下午才装了个gnome,接下来的两天就一直在解决lamp的问题。

FreeBSD中ports的使用和编译还是很大差异的,我以前在centOS上编译过lamp,后来发现port根本不是那么回事,虽然安装命令也是make install,但完全部能用一种思路来理解。

安装apache

cd /usr/ports/www/apache20

make install

多数通过ports安装的软件都会被安装到/usr/local目录下,执行程序在/usr/local/sbin,bin下,配置文件在/usr/local/etc下,库文件在/usr/local/libexec下,www根目录在/usr/local/www/data下.

我们启动apache, 如果你没找到程序路径就用whereis apache, whereis apache2, whereis httpd

最后发现httpd在/usr/local/sbin目录下

/usr/local/sbin/httpd -k start

安装mysql

cd /usr/ports/databases/mysql50-server

make install

我在启动mysql的时候遇到了各种的问题

首先是初始化数据库

/usr/local/bin/mysql_install_db

但是最没有办法解释的竟然是root的权限错误

chmod -R 777 /var/db/mysql

启动mysql

/usr/local/bin/mysqld_safe

安装php5

最头痛的就是安装php5了,因为对ports使用方法的误解,所以一直都没能正确的安装php5.

遇到的问题有以下几个:

1)重新编译的时候需要先运行make clean,否则会出现莫名其妙的问题

2)安装php之前需要先运行make config, 这个很重要,把里面该选的都选上,特别是Apache Build Module那个,否则apache就不能支持php

在不断的重复重复再重复安装之前,有一个问题困扰我很久,就是安装是通过make install安装的,却没有make uninstall命令,找很久发现很多软件安装完需要执行pkg_add -r name,于是就发现了pkg_delete这个命令。

总结一下

在不断的失败之后的失败之后的失败之后,坚持是很重要的,port作为一个很多年之前出现的package管理器来说,算是很强大了,但我完全没办法拿ports和apt-get还有yum来比,因为FreeBSD终究是FreeBSD,So ……

记录两个命令,查找package, 在安装lamp的时候被我用到了无数次, 这个命令貌似一定要在/usr/ports目录下使用

cd /usr/ports

make search key=<key>

上面是使用关键字进行搜索,如果查出的结果太多,那么使用

make search name=<key>

还有呢。。。查看已安装的软件包使用

pkg_info

如果我们想查看是否安装了apache则使用

pkg_info|grep apache

哦了,本文完

2009-03-17

Symfony中的action和actions

类归于: symfony — 标签:zhuozi @ 16:10

Action Class with Two Actions, in frontend/modules/mymodule/actions/actions.class.php

class mymoduleActions extends sfActions
{
public function executeIndex()
{
// ...
}
public function executeList()
{
// ...
}
}

Single Action File, in frontend/modules/mymodule/actions/indexAction.class.php

class indexAction extends sfAction
{
public function execute($request)
{
// ...
}
}

Single Action File, in frontend/modules/mymodule/actions/listAction.class.php

class listAction extends sfAction
{
public function execute($request)
{
// ...
}
}

由于项目需要,需要多人同时针对一个module的相关操作进行修改,虽然是各修改各的,可是在合并的时候,如果采用acitons的方法,文件一定会出现很大的冲突,还好symfony可以定义单个的action,这样我们就可以有效的避免这个问题。

早前文章 »

WordPress 所驱动