THINKPHP+JS缩放图片式截图的实现

没有评论

2010 年 12 月 02 日 at 下午 10:19分类:PHP | WEB开发

原始链接:http://www.cnblogs.com/scotoma/archive/2010/03/05/1679477.html

声明
本博文转载请注明作者和出处,鄙视转载文章还删改内容的LJ,在TP论坛潜水很久了,光看不做点贡献是不行的,呵呵!在这里得到了老大和国的照顾,这段时间将原来的项目里面的一些值得分享的拿出来和大家一起分享了!希望多多各位指教!THINKPHP,I love you.
今晚TP论坛的一位大哥加我了,说也遇到这个方面的问题,呵呵!想想其实很多东西都遇到了,是不是应该分享出来呢?其实自己的很多东西都是别人那来的,取之于网络用之于网络!只有大家多分享,才能够提高!

实现方式
上传图片 — 保存并显示图片 — JS获取缩略图参数 — 提交位置参数 — 图片缩放保存类处理图片 — 保存截取的图片–更新数据库 — 跳转
主要代码一:

public function cutimg()
 {
  $result = $this->upload('temp');
  if (!is_array($result))
  {
   $this->redirect('index');
  }
  else
  {
   $this->assign('imgurl', '__ROOT__/' . C('ATTACHDIR') . '/temp/' . $result[0]['savename']);
   $this->assign('imgname', $result[0]['savename']);
   $this->display();
  }
 } 

主要代码2:

public function setavatar()
 {
  if (!empty($_REQUEST['cut_pos']))
  {
  // import('ORG.Util.ImageResize');
   require('ImageResize.class.php');
   $imgresize = new ImageResize(); 
   // use the full path
   $url = C('ATTACHDIR') . '/temp/' . trim($_POST['imgname']);
   $imgresize->load($url);
   dump($url);
   $posary = explode(',', $_REQUEST['cut_pos']);
   foreach($posary as $k => $v)

   $posary[$k] = intval($v);

   if ($posary[2] > 0 && $posary[3] > 0) $imgresize->resize($posary[2], $posary[3]);

   dump($posary); 
   // create filename rule
   $uico = time() . '.jpg';
   dump($uico);
   $path = C('AVATAR'); 
   // save 120*120 image
   $imgresize->cut(120, 120, intval($posary[0]), intval($posary[1]));
   $large = 'l_' . $uico;
   $imgresize->save($path . $large);

   echo '<img src="'.__ROOT__.'/' . $path . $large . '" />'; 
   // update database
  }
  else
  { 
   // error reporting
  }
 }

源代码下载地址: 点击下载 其他的自己去完善了,运行需要TP框架请访问 http://www.thinkphp.cn 下载,然后下载扩展包,因为用到Upload类!

CI中外部分页类的使用

没有评论

2010 年 12 月 02 日 at 下午 9:06分类:PHP | WEB开发

由于CI内部集成的分页类不适合本人的使用,而且效果不是很好看!今天在CI论坛上搜了下,找到了一个很不错的外国站,讲了一个分页类的使用。感觉非常好,现在推荐给各位!网址:http://mis-algoritmos.com/digg-style-pagination-class,从这个网站上下载下了一个类文件,用来自己使用!
首先重命名下,去掉名称中class字符!因为CI 中有个分页类文件,因此重名后最好不要和CI 的那个分页类名称相同!我命名为:Cpagination.php,别忘了把类名也改成一样的哦。然后把这个文件放到项目的libraries文件夹下面,之后我们在控制器中调用,调用代码如下:

function index()
{
$p = $this->uri->segment(3);
echo "你好!世界!";
$this->load->library('Cpagination');
$this->cpagination->items(1000);	 //总数据数
$this->cpagination->limit(10);	 //每页显示数据数
$this->cpagination->currentPage($p?$p:1);	//当前页
$this->cpagination->target(site_url('index/index'));//分页的URL
$page = $this->cpagination->getOutput();
$data['title'] = '测试分页插件';
$data['page'] = $page;
$this->load->view('index',$data);

}

我们从上述站点上面还下载了一个Css文件,是用来控制分页样式的!我们在视图中这样子调用:

[/<link type="text/css" rel="stylesheet" href="<?php echo base_url().'Css/style.css';?>"/>
</head>
<body>
<?php echo $page;?>

只要加载相应的CSS文件,那么效果就出来了!
整个就这么简单!
在这个顺便讲下要是在ThinkPHP该如何使用呢?
其实是一样的,我们把下载下来的类文件放在我们的项目文件夹下面的Lib下面的ORG文件下面,将文件的名字的首字母改成大写的!之后再控制器中调用如下:

public function page()
{
import('@.ORG.Pagination');
$page = new Pagination();
$page->items(1000);	 //总数据数
$page->limit(10);	 //每页显示数据数
$page->currentPage($p?$p:1);	//当前页
$page->target(site_url('index/index'));//分页的URL
$html = $page->getOutput();
$this->assign('page',$html);
$this->display();
}

在模板文件中的用法和CI中是一样的,都要加载相应的css文件,效果同样子就出来了!下面是相关的效果图:

话说中国价

没有评论

2010 年 12 月 02 日 at 下午 5:37分类:乱七八糟

CI中验证码的使用

一条评论

2010 年 12 月 02 日 at 下午 3:57分类:PHP | WEB开发

    今天在做项目的时候要用到一个验证码程序!从CI的手册上看了下,找不到很好的资料,在CI 的论坛上找了几个 但是运行起来都是有点问题的!有些是不能显示的,有些是报错的!都是人家写的代码,不知道如何入手去修改那些错误的地方!还有些就是能够显示的,但是效果不是我想要的!在之前学习TP的时候 感觉TP的验证码做的不错!而且效果蛮不错的!最主要的是功能还是蛮强大的!支持中英文和各种样式的验证码生成!于是扔掉了从论坛上DOWN下来的所有验证码程序,自己把TP的整个验证码程序移植过来了!整合了一下,把所有的代码写在了一个类文件(Image.php)中,当然在移植的过程中修改了不少的东西,但是主要的效果和原理还是不变!主要是为了能够适应CI的环境!
    首先在Image.php文件中主要的有两个函数,其中的buildImageVerify()函数使用来生成英文 和数字的验证码的。还有一个函数buildGbVerify()是用来生成中文的验证码的!不用管这两个函数是怎么运行的!我们只要把这个文件(Image.php)放在我们项目或者是系统libraries文件夹中,然后在我们的控制器中调用就可以了!如:

               //验证码的实现1
		public function authCode () {  
			$this->load->plugin('captcha');
			$cap = create_captcha(array(        
				'img_width'	 => 80,
				'img_height' => 25,
				'word_length' => 5
			));  
		}
		//验证码实现2
		public function auth()
		{
			$type = isset($_GET['type'])?$_GET['type']:'gif';
			$this->load->library('image');
			Image::buildImageVerify(4,1,$type);    //输出英文,数字验证码
			Image::buildGbVerify(4,$type,'120','50','system\fonts\simhei.ttf');    //输出汉字验证码
			//echo $thid->session->userdata('check');       //输出验证码中的字符串
		}

首先第一个是采用的系统自带的验证码,不过样式不怎么好看,我个人感觉哈,所以就PASS了,
第二个是自己整理的出来的。首先得加载验证码的类文件,然后分别调用不同的方法 ,来显示不同样式的验证码!
其中要说名一点是,在调用汉字的验证码是,必须要指定字体的路径,相对index.php文件来说的。(我试了很多字体 好像只有这个字体可以正常显示啊!)
我们要想在视图中调用的话,直接这样子写:

<body>
<SCRIPT>
	function freshcheck () {		//重载验证码
		var timenow = new Date().getTime();
		document.getElementById("checkimg").src="<?php echo base_url().'index/auth/';?>"+timenow;
	}
</SCRIPT>
<img id="checkimg" src=<?php echo site_url('index/auth');?> align="middle" title="点击刷新" onclick="javascript:freshcheck();"/>
</body>

这样子以来在视图页面显示验证码和实现局部刷新验证码的功能就算OVER了!