下面这个代码,是可以直接把图片处理为四个角都为园的。
但是现在产生的图片是没生成文件的,想改为处理的文件可以生成一个在指定目录。。
弄了两天,总是不行。。。求高手帮忙看看。。谢谢!
例如运行网址:http://www.xxx.com/pic.php?gopic=1234.jpg
pic.php代码如下:
<?php class RoundedCorner { private $_r; private $_g; private $_b; private $_image_path; private $_radius; function __construct($image_path, $radius, $r = 255, $g = 255, $b = 255) { $this->_image_path = $image_path; $this->_radius = $radius; $this->_r = (int)$r; $this->_g = (int)$g; $this->_b = (int)$b; } private function _get_lt_rounder_corner() { $radius = $this->_radius; $img = imagecreatetruecolor($radius, $radius); $bgcolor = imagecolorallocate($img, $this->_r, $this->_g, $this->_b); $fgcolor = imagecolorallocate($img, 0, 0, 0); imagefill($img, 0, 0, $bgcolor); imagefilledarc($img, $radius, $radius, $radius*2, $radius*2, 180, 270, $fgcolor, IMG_ARC_PIE); imagecolortransparent($img, $fgcolor); return $img; } private function _load_source_image() { $ext = substr($this->_image_path, strrpos($this->_image_path, '.')); if (empty($ext)) { return false; } switch(strtolower($ext)) { case '.jpg': $img = @imagecreatefromjpeg($this->_image_path); break; case '.gif': $img = @imagecreatefromgif($this->_image_path); break; case '.png': $img = @imagecreatefrompng($this->_image_path); break; default: return false; } return $img; } public function round_it() { // load the source image $src_image = $this->_load_source_image(); if ($src_image === false) { die('错误:图片不存在'); } $image_width = imagesx($src_image); $image_height = imagesy($src_image); // create a new image, with src_width, src_height, and fill it with transparent color $image = imagecreatetruecolor($image_width, $image_height); $trans_color = imagecolorallocate($image, $this->_r, $this->_g, $this->_b); imagefill($image, 0, 0, $trans_color); // then overwirte the source image to the new created image imagecopymerge($image, $src_image, 0, 0, 0, 0, $image_width, $image_height, 100); // then just copy all the rounded corner images to the 4 corners $radius = $this->_radius; // lt $lt_corner = $this->_get_lt_rounder_corner(); imagecopymerge($image, $lt_corner, 0, 0, 0, 0, $radius, $radius, 100); // lb $lb_corner = imagerotate($lt_corner, 90, $trans_color); imagecopymerge($image, $lb_corner, 0, $image_height - $radius, 0, 0, $radius, $radius, 100); // rb $rb_corner = imagerotate($lt_corner, 180, $trans_color); imagecopymerge($image, $rb_corner, $image_width - $radius, $image_height - $radius, 0, 0, $radius, $radius, 100); // rt $rt_corner = imagerotate($lt_corner, 270, $trans_color); imagecopymerge($image, $rt_corner, $image_width - $radius, 0, 0, 0, $radius, $radius, 100); // set the transparency imagecolortransparent($image, $trans_color); // display it header('Content-Type: image/png'); imagepng($image); imagedestroy($src_image); imagedestroy($image); imagedestroy($lt_corner); imagedestroy($lb_corner); imagedestroy($rb_corner); imagedestroy($rt_corner); } } $rounder = new RoundedCorner($_GET['gopic'], 20); $rounder->round_it(); ?>
哥们,保存图片请用saveas() 这样就可以放在指定的目录下了
public function round_it( $filename='') {
public function round_it( $filename='') {
....
header('Content-Type: image/png');
if($filename) imagepng($image, $filename);
else imagepng($image);
imagedestroy($src_image);
imagedestroy($image);
imagedestroy($lt_corner);
imagedestroy($lb_corner);
imagedestroy($rb_corner);
imagedestroy($rt_corner);
}
版主。。你这个是替换吗?我弄了不行啊。。
能不能直接给我一个完整的?
哥们,保存图片请用saveas() 这样就可以放在指定的目录下了
思路我知道,具体代码如何写才好?帮忙整一下啊。。我弄了总不行。。
一样无法保存图片在目录里。
public function round_it( $filename='') {
....
header('Content-Type: image/png');
if($filename) imagepng($image, $filename);
else imagepng($image);
imagedestroy($src_image);
imagedestroy($image);
imagedestroy($lt_corner);
imagedestroy($lb_corner);
imagedestroy($rb_corner);
imagedestroy($rt_corner);
}
使用版主的修改,然后调用的时候
$rounder->round_it( 你要保存的目录);
把
imagepng($image);
改为
imagepng($image,$src_image);
试试
上面的错了,是应该改成把
imagepng($image);
改为
imagepng($image,$this->_image_path);
看错了
只要把把
imagepng($image);
改为
imagepng($image,$this->_image_path);
就好了
其他的都不要变
只要把把
imagepng($image);
改为
imagepng($image,$this->_image_path);
就好了
其他的都不要变
我试了不行,连图片都不会显示出来。
还是我代码搞错了?版主之间贴改好的给我看吧?
不然这样,我套代码也有可能是我自己搞错??
public function round_it( $filename='') {
....
header('Content-Type: image/png');
if($filename) imagepng($image, $filename);
else imagepng($image);
imagedestroy($src_image);
imagedestroy($image);
imagedestroy($lt_corner);
imagedestroy($lb_corner);
imagedestroy($rb_corner);
imagedestroy($rt_corner);
}
使用版主的修改,然后调用的时候
$rounder->round_it( 你要保存的目录);
也不行呐、、搞得我都乱了。。求直接贴出代码啊。。谢谢啊!
没人帮忙了吗?
总是按你们说的,都搞了总不行啊。。。
只要把把
imagepng($image);
改为
imagepng($image,$this->_image_path);
就好了
其他的都不要变
我试了不行,连图片都不会显示出来。
还是我代码搞错了?版主之间贴改好的给我看吧?
不然这样,我套代码也有可能是我自己搞错??
不行才怪,我测试了可以正常的
这个是我用你的程序之前的图片
下面这个是用你程序之后的图片
倒,2个图搞颠倒了
第一个是用你程序处理过的
下面那个是原图
倒,2个图搞颠倒了
第一个是用你程序处理过的
下面那个是原图
我试了真的不行呐。。。你会不会前面代码给错我了???
你还是直接把代码贴出来吧。。我难道还忽悠你不好吗?真的弄了用不行。。。
贴出来吧,然后结贴了。。
bool imagepng ( resource image [, string filename] )
imagepng() 将 GD 图像流(image)以 PNG 格式输出到标准输出(通常为浏览器),或者如果用 filename 给出了文件名则将其输出到该文件。
倒,2个图搞颠倒了
第一个是用你程序处理过的
下面那个是原图
我试了真的不行呐。。。你会不会前面代码给错我了???
你还是直接把代码贴出来吧。。我难道还忽悠你不好吗?真的弄了用不行。。。
贴出来吧,然后结贴了。。
我直接把 imagepng($image); 改为 imagepng($image,$this->_image_path); 了
其他的都没改
哦,还有注意一点的是,因为你这程序还没有复制移动(即上传)到别的文件夹的功能,所以,你所生成的圆角图片覆盖的是原图片
如果你想生成到别的文件夹,并且不破坏原来的图片,那你必须先复制移动(即上传)到别的文件夹(你指定的文件夹),然后在用移动后的文件进行上面的圆角处理
哦,还有注意一点的是,因为你这程序还没有复制移动(即上传)到别的文件夹的功能,所以,你所生成的圆角图片覆盖的是原图片
那如果要输出命名文件又得如何写?
哦,还有注意一点的是,因为你这程序还没有复制移动(即上传)到别的文件夹的功能,所以,你所生成的圆角图片覆盖的是原图片
真是无语,坑爹呀!我告诉你,真的按你的方法,改了直接把 imagepng($image); 改为 imagepng($image,$this->_image_path); 是不行的!!!!!!!!
你自己试了吗???????
哦,还有注意一点的是,因为你这程序还没有复制移动(即上传)到别的文件夹的功能,所以,你所生成的圆角图片覆盖的是原图片
真是无语,坑爹呀!我告诉你,真的按你的方法,改了直接把 imagepng($image); 改为 imagepng($image,$this->_image_path); 是不行的!!!!!!!!
你自己试了吗???????
无语,我不试怎么又那2张图片?
处理之前
所用程序
执行结果
处理后的结果:
处理之前
所用程序
执行结果
处理后的结果:
我可以断定,一定是你告诉我的代码有哪里还需要改?
我真的按你说的,把这句改了,是不行的!!!!!
而且改了之后,不但不会生成文件,图片还无法显示出来!你看:
如果你想生成到别的文件夹,并且不破坏原来的图片,那你必须先复制移动(即上传)到别的文件夹(你指定的文件夹),然后在用移动后的文件进行上面的圆角处理
实在抱歉。。可以了!!!居然是我电脑的问题!!!!!
我换个电脑就行了!!!无语。。。实在为难你了版主!!!
那另外请教一个,如果要将生成的图片输出保存到指定目录,又得如何写才好呢?
如果你想生成到别的文件夹,并且不破坏原来的图片,那你必须先复制移动(即上传)到别的文件夹(你指定的文件夹),然后在用移动后的文件进行上面的圆角处理
实在抱歉。。可以了!!!居然是我电脑的问题!!!!!
我换个电脑就行了!!!无语。。。实在为难你了版主!!!
那另外请教一个,如果要将生成的图片输出保存到指定目录,又得如何写才好呢?
这个我在20#说过了
“如果你想生成到别的文件夹,并且不破坏原来的图片,那你必须先复制移动(即上传)到别的文件夹(你指定的文件夹),然后在用移动后的文件进行上面的圆角处理”
如果你想生成到别的文件夹,并且不破坏原来的图片,那你必须先复制移动(即上传)到别的文件夹(你指定的文件夹),然后在用移动后的文件进行上面的圆角处理
这样不是比较麻烦?
无法说直接 www.xxx.com/pic.php?pic=123.jpg 这样通过文件执行来生成一个文件到指定目录?
如果你想生成到别的文件夹,并且不破坏原来的图片,那你必须先复制移动(即上传)到别的文件夹(你指定的文件夹),然后在用移动后的文件进行上面的圆角处理
这样不是比较麻烦?
无法说直接 www.xxx.com/pic.php?pic=123.jpg 这样通过文件执行来生成一个文件到指定目录?
晕死,当然可以啊
文件复制移动,怎么就不可以呢?
关键是你要写文件复制移动程序
如果你是保存时用的还是原来的图片名称,保存时加个随机数,否则生成的图片保存时还是原来的那张图。
或者保存时换个名称。
关键是你要写文件复制移动程序
我就文件重命名行吧?例如生成的文件保存到指定目录okpic里面,可是。。我今晚试了也不行。。。代码总写不对。。。。
继续求救如何写?
关键是你要写文件复制移动程序
我就文件重命名行吧?例如生成的文件保存到指定目录okpic里面,可是。。我今晚试了也不行。。。代码总写不对。。。。
继续求救如何写?
我想问你,你懂文件复制移动么?
简单的不能再简单
只要在
private function _load_source_image() {
这个函数的
$ext = substr($this->_image_path, strrpos($this->_image_path, '.'));
if (empty($ext)) {
return false;
}
这段代码下面加一个复制移动文件的代码就OK,即:
if (file_exists($this->_image_path) === TRUE) { if(!file_exists('okpic')){ @mkdir('okpic'); } $newpath='okpic/'.$this->_image_path; if (!copy($this->_image_path, $newpath)){ return false; } $this->_image_path=$newpath; }
如果要重命名也简单
就是只要
$newpath='okpic/'.$this->_image_path;
改成
$newpath='okpic/'.date('YmdHis').$ext;
这样就可以重命名并且复制移动了
二楼说的可以用的啊
如果要重命名也简单
就是只要
$newpath='okpic/'.$this->_image_path;
改成
$newpath='okpic/'.date('YmdHis').$ext;
这样就可以重命名并且复制移动了
重命名的我自己写好了,就是按日期去命名。
现在有个问题,就是 http://www.xxx.com/pic.php?gopic=uploadfiles/123.jpg
这样的话,加了uploadfiles的路径目录,总是提示图片不存在,但是却会生成了一个文件到okpic里面?
代码哪里出问题呢?