图片生成缩略图代码
图片生成缩略图代码
<?php
# Constants
define("IMAGE_BASE", './');
define("MAX_WIDTH", 150);
define("MAX_HEIGHT", 150);
# Get image locationstr_replace('..', '', $_SERVER['QUERY_STRING']);
$image_file = 't.jpg';
$image_path = IMAGE_BASE . "$image_file";
# Load image
$img = null;
$ext = strtolower(end(explode('.', $image_path)));
if ($ext == 'jpg' || $ext == 'jpeg') {
$img = imagecreatefromjpeg($image_path);
} else if ($ext == 'png') {
$img = @imagecreatefrompng($image_path);
# Only if your version of GD includes GIF support
} else if ($ext == 'gif') {
$img = @imagecreatefrompng($image_path);
}
# If an image was successfully loaded, test the image for size
if ($img) {
# Get image size and scale ratio
$width = imagesx($img);
$height = imagesy($img);
$scale = min(MAX_WIDTH/$width, MAX_HEIGHT/$height);
# If the image is larger than the max shrink it
if ($scale < 1) {
$new_width =150; //floor($scale*$width);
$new_height =150;// floor($scale*$height);
# Create a new temporary image
$tmp_img = imagecreatetruecolor($new_width, $new_height);
# Copy and resize old image into new image
imagecopyresized($tmp_img, $img, 0, 0, 0, 0,$new_width, $new_height, $width, $height);
imagedestroy($img);
$img = $tmp_img;
}
}
# Create error image if necessary
if (!$img) {
$img = imagecreate(MAX_WIDTH, MAX_HEIGHT);
imagecolorallocate($img,0,0,0);
$c = imagecolorallocate($img,70,70,70 );
imageline($img,0,0,MAX_WIDTH,MAX_HEIGHT,$c2);
imageline($img,MAX_WIDTH,0,0,MAX_HEIGHT,$c2);
}
# Display the image
header("Content-type: image/jpeg");
imagejpeg($img);
imagedestroy($img);
?>
ob_start();
$start = microtime(true);
$src = imagecreatefromjpeg($_GET["imageurl"]);
$width = imagesx($src);
$height = imagesy($src);
$dst = imagecreatetruecolor(160, 120);
imagecopyresampled($dst,$src,0,0,0,0,160,120,$width,$height);
header('Content-Type: image/jpeg');
imagejpeg($dst,'',100);
ob_end_clean();
echo microtime(true) - $start;
php生成 曲线图 程序
<?php
/*******************用法*************************
$gg=new build_graph();
$d1=array(0,62,25,20,20,100,99); //曲线一
//$d1=array('15'=>5,'16'=>8,'17'=>7,'18'=>9,'19'=>10,'20'=>15,'21'=>9); 改成这个形式啦
$d2=array(0,80,75,65,100,56,79); //曲线二
$d3=array(0,60,50,25,12,56,45); //曲线三 一下可以继续以此类推
$gg->add_data($d1);
$gg->add_data($d2);
$gg->add_data($d3);
$gg->set_colors("ee00ff,dd8800,00ff00"); //对应曲线的颜色
//生成曲线图
$gg->build("line",0); //参数0表示显示所有曲线,1为显示第一条,依次类推
//生成矩形图
//$gg->build("rectangle","2"); //参数0表示显示第一个矩形,1也为显示第一条,其余依次类推
///////////////////////////////////////////////////////////
//自定义图形显示,可任意图形叠加显示
header("Content-type: image/png");
$gg->create_cloths(); //画布
$gg->create_frame(); //画个框先
//$gg->build_rectangle(2); //画矩形
$gg->create_line(); //画线
$gg->build_line(0); //画曲线
imagepng($gg->image);
imagedestroy($gg->image);
*/
class build_graph {
var $graphwidth=300;
var $graphheight=300;
var $width_num=0; //宽分多少等分
var $height_num=10; //高分多少等分,默认为10
var $height_var=0; //高度增量(用户数据平均数)
var $width_var=0; //宽度增量(用户数据平均数)
var $height_max=0; //最大数据值
var $array_data=array(); //用户待分析的数据的二维数组
var $array_error=array(); //收集错误信息
var $colorBg=array(255,255,255); //图形背景-白色
var $colorGrey=array(192,192,192); //灰色画框
var $colorBlue=array(0,0,255); //蓝色
var $colorRed=array(255,0,0); //红色(点)
var $colorDarkBlue=array(0,0,255); //深色
var $colorLightBlue=array(200,200,255); //浅色
var $array_color; //曲线着色(存储十六进制数)
var $image; //我们的图像
//方法:接受用户数据
function add_data($array_user_data)
{
if(!is_array($array_user_data) or empty($array_user_data))
{
$this->array_error['add_data']="没有可供分析的数据";
return false;
exit();
}
$i=count($this->array_data);
$this->array_data[$i]=$array_user_data;
}
//方法:定义画布宽和长
function set_img($img_width,$img_height){
$this->graphwidth=$img_width;
$this->graphheight=$img_height;
}
//设定Y轴的增量等分,默认为10份
function set_height_num($var_y){
$this->height_num=$var_y;
}
//定义各图形各部分色彩
function get_RGB($color){ //得到十进制色彩
$R=($color>>16) & 0xff;
$G=($color>>8) & 0xff;
$B=($color) & 0xff;
return (array($R,$G,$B));
}
//---------------------------------------------------------------
#定义背景色
function set_color_bg($c1,$c2,$c3){
$this->colorBg=array($c1,$c2,$c3);
}
#定义画框色
function set_color_Grey($c1,$c2,$c3){
$this->colorGrey=array($c1,$c2,$c3);
}
#定义蓝色
function set_color_Blue($c1,$c2,$c3){
$this->colorBlue=array($c1,$c2,$c3);
}
#定义色Red
function set_color_Red($c1,$c2,$c3){
$this->colorRed=array($c1,$c2,$c3);
}
#定义深色
function set_color_DarkBlue($c1,$c2,$c3){
$this->colorDarkBlue=array($c1,$c2,$c3);
}
#定义浅色
function set_color_LightBlue($c1,$c2,$c3){
$this->colorLightBlue=array($c1,$c2,$c3);
}
//---------------------------------------------------------------
//方法:由用户数据将画布分成若干等份宽
//并计算出每份多少像素
function get_width_num(){
$this->width_num=count($this->array_data[0]);
}
function get_max_height(){
//获得用户数据的最大值
$tmpvar=array();
foreach($this->array_data as $tmp_value)
{
$tmpvar[]=max($tmp_value);
}
$this->height_max=max($tmpvar);
return max($tmpvar);
}
function get_height_length(){
//计算出每格的增量长度(用户数据,而不是图形的像素值)
$max_var=$this->get_max_height();
$max_var=round($max_var/$this->height_num);
$first_num=substr($max_var,0,1);
if(substr($max_var,1,1)){
if(substr($max_var,1,1)>=5)
$first_num+=1;
}
for($i=1;$i<strlen($max_var);$i++){
$first_num.="0";
}
return (int)$first_num;
}
function get_var_wh() //得到高和宽的增量
{
$this->get_width_num();
//得到高度增量和宽度增量
$this->height_var=$this->get_height_length();
$this->width_var=round($this->graphwidth/$this->width_num);
}
function set_colors($str_colors){
//用于多条曲线的不同着色,如$str_colors="ee00ff,dd0000,cccccc"
$this->array_color=split(",",$str_colors);
}
######################################################################################################
function build_line($var_num)
{
if(!empty($var_num))
{ //如果用户只选择显示一条曲线
$array_tmp[0]=$this->array_data[$var_num-1];
$this->array_data=$array_tmp;
}
//画线
for($j=0;$j<count($this->array_data);$j++)
{
list($R,$G,$B)=$this->get_RGB(hexdec($this->array_color[$j]));
$colorBlue=imagecolorallocate($this->image,$R,$G,$B);
$i=0;
foreach($this->array_data[$j] as $keys=>$values)
{
$height_next_pix[]=round($this->array_data[$j][$keys]/$this->height_max*$this->graphheight);
}
foreach($this->array_data[$j] as $key=>$value)
{
$height_pix=round(($this->array_data[$j][$key]/$this->height_max)*$this->graphheight);
if($i!=count($this->array_data[$j])-1)
{
imageline($this->image,$this->width_var*$i,$this->graphheight-$height_pix,$this->width_var*($i+1),$this->graphheight-$height_next_pix[$i+1],$colorBlue);
}
$i++;
}
//print_r($height_next_pix);
// exit;
/*
for($i=0;$i<$this->width_num-1;$i++)
{
$height_pix=round(($this->array_data[$j][$i]/$this->height_max)*$this->graphheight);
$height_next_pix=round($this->array_data[$j][$i+1]/$this->height_max*$this->graphheight);
imageline($this->image,$this->width_var*$i,$this->graphheight-$height_pix,$this->width_var*($i+1),$this->graphheight-$height_next_pix,$colorBlue);
}*/
}
//画点
$colorRed=imagecolorallocate($this->image, $this->colorRed[0], $this->colorRed[1], $this->colorRed[2]);
for($j=0;$j<count($this->array_data);$j++)
{
$i=0;
foreach($this->array_data[$j] as $key=>$value)
{
$height_pix=round(($this->array_data[$j][$key]/$this->height_max)*$this->graphheight);
imagearc($this->image,$this->width_var*$i,$this->graphheight-$height_pix,6,5,0,360,$colorRed);
imagefilltoborder($this->image,$this->width_var*$i,$this->graphheight-$height_pix,$colorRed,$colorRed);
$i++;
}
/*
for($i=0;$i<$this->width_num;$i++)
{
$height_pix=round(($this->array_data[$j][$i]/$this->height_max)*$this->graphheight);
imagearc($this->image,$this->width_var*$i,$this->graphheight-$height_pix,6,5,0,360,$colorRed);
imagefilltoborder($this->image,$this->width_var*$i,$this->graphheight-$height_pix,$colorRed,$colorRed);
}
*/
}
}
######################################################################################################
function build_rectangle($select_gra){
if(!empty($select_gra)){ //用户选择显示一个矩形
$select_gra-=1;
}
//画矩形
//配色
$colorDarkBlue=imagecolorallocate($this->image, $this->colorDarkBlue[0], $this->colorDarkBlue[1], $this->colorDarkBlue[2]);
$colorLightBlue=imagecolorallocate($this->image, $this->colorLightBlue[0], $this->colorLightBlue[1], $this->colorLightBlue[2]);
if(empty($select_gra))
$select_gra=0;
for($i=0; $i<$this->width_num; $i++){
$height_pix=round(($this->array_data[$select_gra][$i]/$this->height_max)*$this->graphheight);
imagefilledrectangle($this->image,$this->width_var*$i,$this->graphheight-$height_pix,$this->width_var*($i+1),$this->graphheight, $colorDarkBlue);
imagefilledrectangle($this->image,($i*$this->width_var)+1,($this->graphheight-$height_pix)+1,$this->width_var*($i+1)-5,$this->graphheight-2, $colorLightBlue);
}
}
######################################################################################################
function create_cloths(){
//创建画布
$this->image=imagecreate($this->graphwidth+20,$this->graphheight+20);
}
function create_frame(){
//创建画框
$this->get_var_wh();
//配色
$colorBg=imagecolorallocate($this->image, $this->colorBg[0], $this->colorBg[1], $this->colorBg[2]);
$colorGrey=imagecolorallocate($this->image, $this->colorGrey[0], $this->colorGrey[1], $this->colorGrey[2]);
//创建图像周围的框
imageline($this->image, 0, 0, 0, $this->graphheight,$colorGrey);
imageline($this->image, 0, 0, $this->graphwidth, 0,$colorGrey);
imageline($this->image, ($this->graphwidth-1),0,($this->graphwidth-1),($this->graphheight-1),$colorGrey);
imageline($this->image, 0,($this->graphheight-1),($this->graphwidth-1),($this->graphheight-1),$colorGrey);
}
function create_line()
{
//创建网格。
$this->get_var_wh();
$colorBg=imagecolorallocate($this->image, $this->colorBg[0], $this->colorBg[1], $this->colorBg[2]);
$colorGrey=imagecolorallocate($this->image, $this->colorGrey[0], $this->colorGrey[1], $this->colorGrey[2]);
$colorRed=imagecolorallocate($this->image, $this->colorRed[0], $this->colorRed[1], $this->colorRed[2]);
for($i=1;$i<=$this->height_num;$i++)
{
//画横线
$y1=($this->graphheight-($this->height_var/$this->height_max*$this->graphheight)*$i);
$y2=($this->graphheight-($this->height_var/$this->height_max*$this->graphheight)*$i);
imageline($this->image,0,$y1,$this->graphwidth,$y2,$colorGrey);
//标出数字
imagestring($this->image,2,0,$this->graphheight-($this->height_var/$this->height_max*$this->graphheight)*$i,$this->height_var*$i,$colorRed);
}
unset($i);
foreach($this->array_data[0] as $key=>$value)
{
//画竖线
imageline($this->image,$this->width_var*$i,0,$this->width_var*$i,$this->graphwidth,$colorGrey);
//标出数字
imagestring($this->image,2,$this->width_var*$i,$this->graphheight-15,$key,$colorRed);
$i++;
}
/*
for($i=1;$i<=$this->width_num;$i++)
{
//画竖线
imageline($this->image,$this->width_var*$i,0,$this->width_var*$i,$this->graphwidth,$colorGrey);
//标出数字
imagestring($this->image,2,$this->width_var*$i,$this->graphheight-15,$i,$colorRed);
}
*/
}
function build($graph,$str_var){
//$graph是用户指定的图形种类,$str_var是生成哪个数据的图
header("Content-type: image/jpeg");
$this->create_cloths(); //先要有画布啊~~
switch ($graph){
case "line":
$this->create_frame(); //画个框先:)
$this->create_line(); //打上底格线
$this->build_line($str_var); //画曲线
break;
case "rectangle":
$this->create_frame(); //画个框先:)
$this->build_rectangle($str_var); //画矩形
$this->create_line(); //打上底格线
break;
}
//输出图形并清除内存
imagepng($this->image);
imagedestroy($this->image);
}
}
?>
function Thumb_IM($thumbwidth, $thumbheight, $preview = 0) {
global $thumbstatus, $imageimpath, $thumbquality;
if($thumbstatus) {
list($img_w, $img_h) = $this->attachinfo;
$targetfile = !$preview ? ($thumbstatus == 1 || $thumbstatus == 3 ? $this->targetfile.'.thumb.jpg' : $this->targetfile) : DISCUZ_ROOT.'./forumdata/watermark_temp.jpg';
if(!$this->animatedgif && ($img_w >= $thumbwidth || $img_h >= $thumbheight)) {
if($thumbstatus != 3) {
$exec_str = $imageimpath.'/convert -quality '.intval($thumbquality).' -geometry '.$thumbwidth.'x'.$thumbheight.' '.$this->targetfile.' '.$targetfile;
@exec($exec_str, $output, $return);
if(empty($return) && empty($output)) {
$this->attach['thumb'] = $thumbstatus == 1 ? 1 : 0;
}
} else {
$imgratio = $img_w / $img_h;
$thumbratio = $thumbwidth / $thumbheight;
if($imgratio >= 1 && $imgratio >= $thumbratio || $imgratio < 1 && $imgratio > $thumbratio) {
$cuty = $img_h;
$cutx = $cuty * $thumbratio;
} elseif($imgratio >= 1 && $imgratio <= $thumbratio || $imgratio < 1 && $imgratio < $thumbratio) {
$cutx = $img_w;
$cuty = $cutx / $thumbratio;
}
$exec_str = $imageimpath.'/convert -crop '.$cutx.'x'.$cuty.'+0+0 '.$this->targetfile.' '.$targetfile;
@exec($exec_str, $output, $return);
$exec_str = $imageimpath.'/convert -quality '.intval($thumbquality).' -geometry '.$thumbwidth.'x'.$thumbheight.' '.$targetfile.' '.$targetfile;
@exec($exec_str, $output, $return);
if(empty($return) && empty($output)) {
$this->attach['thumb'] = $thumbstatus == 1 || $thumbstatus == 3 ? 1 : 0;
}
}
}
}
}
function Watermark_IM($preview = 0) {
global $watermarkstatus, $watermarktype, $watermarktrans, $watermarkquality, $watermarktext, $imageimpath;
$watermarkstatus = $GLOBALS['forum']['disablewatermark'] ? 0 : $watermarkstatus;
switch($watermarkstatus) {
case 1:
$gravity = 'NorthWest';
break;
case 2:
$gravity = 'North';
break;
case 3:
$gravity = 'NorthEast';
break;
case 4:
$gravity = 'West';
break;
case 5:
$gravity = 'Center';
break;
case 6:
$gravity = 'East';
break;
case 7:
$gravity = 'SouthWest';
break;
case 8:
$gravity = 'South';
break;
case 9:
$gravity = 'SouthEast';
break;
}
$targetfile = !$preview ? $this->targetfile : DISCUZ_ROOT.'./forumdata/watermark_temp.jpg';
if($watermarktype < 2) {
$watermark_file = $watermarktype == 1 ? DISCUZ_ROOT.'./images/common/watermark.png' : DISCUZ_ROOT.'./images/common/watermark.gif';
$exec_str = $imageimpath.'/composite'.
($watermarktype != 1 && $watermarktrans != '100' ? ' -watermark '.$watermarktrans.'%' : '').
' -quality '.$watermarkquality.
' -gravity '.$gravity.
' '.$watermark_file.' '.$this->targetfile.' '.$targetfile;
} else {
$watermarktextcvt = str_replace(array("n", "r", "'"), array('', '', '''), pack("H*", $watermarktext['text']));
$watermarktext['angle'] = -$watermarktext['angle'];
$translate = $watermarktext['translatex'] || $watermarktext['translatey'] ? ' translate '.$watermarktext['translatex'].','.$watermarktext['translatey'] : '';
$skewX = $watermarktext['skewx'] ? ' skewX '.$watermarktext['skewx'] : '';
$skewY = $watermarktext['skewy'] ? ' skewY '.$watermarktext['skewy'] : '';
$exec_str = $imageimpath.'/convert'.
' -quality '.$watermarkquality.
' -font "'.$watermarktext['fontpath'].'"'.
' -pointsize '.$watermarktext['size'].
(($watermarktext['shadowx'] || $watermarktext['shadowy']) && $watermarktext['shadowcolor'] ?
' -fill "rgb('.$watermarktext['shadowcolor'].')"'.
' -draw "'.
' gravity '.$gravity.$translate.$skewX.$skewY.
' rotate '.$watermarktext['angle'].
' text '.$watermarktext['shadowx'].','.$watermarktext['shadowy'].' ''.$watermarktextcvt.''"' : '').
' -fill "rgb('.$watermarktext['color'].')"'.
' -draw "'.
' gravity '.$gravity.$translate.$skewX.$skewY.
' rotate '.$watermarktext['angle'].
' text 0,0 ''.$watermarktextcvt.''"'.
' '.$this->targetfile.' '.$targetfile;
}
@exec($exec_str, $output, $return);
if(empty($return) && empty($output)) {
$this->attach['size'] = filesize($this->targetfile);
}
}
相关文章
- 本文介绍两种使用 php 生成二维码的方法。 (1)利用google生成二维码的开放接口,代码如下: /** * google api 二维码生成【QRcode可以存储最多4296个字母数字类型的任意文本,具体可以查看二维码数据格式】 * @param strin...2015-10-21
- 这篇文章主要介绍了Java生成随机姓名、性别和年龄的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-01
- 这篇文章主要介绍了C#生成随机数功能,涉及C#数学运算与字符串操作相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 下面小编就为大家带来一篇jQuery为动态生成的select元素添加事件的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-09-01
- 经常制作开发不同的网站的后台,写过很多种不同的后台导航写法。 最终积累了这种最写法,算是最好的吧...2013-09-29
- 关于生成唯一数字ID的问题,是不是需要使用rand生成一个随机数,然后去数据库查询是否有这个数呢?感觉这样的话有点费时间,有没有其他方法呢?当然不是,其实有两种方法可以解决。 1. 如果你只用php而不用数据库的话,那时间戳+随...2015-11-24
- js生成随机数主要用到了内置的Math对象的random()方法。用法如:Math.random()。它返回的是一个 0 ~ 1 之间的随机数。有了这么一个方法,那生成任意随机数就好理解了。比如实际中我们可能会有如下的需要: (1)生成一个 0 - 1...2015-10-21
- 这篇文章主要介绍了c#生成高清缩略图的二个示例,需要的朋友可以参考下...2020-06-25
- 验证码是一个现在WEB2.0中常见的一个功能了,像注册、登录又或者是留言页面,都需要注册码来验证当前操作者的合法性,我们会看到有些网站没有验证码,但那是更高级的验证了,...2016-11-25
- 复制代码 代码如下:function getTagStyle(){ $minFontSize=8; //最小字体大小,可根据需要自行更改 $maxFontSize=18; //最大字体大小,可根据需要自行更改 return 'font-size:'.($minFontSize+lcg_value()*(abs($maxFo...2013-10-04
- 解决办法:$str=”QB”.str_pad(($maxid[0]["max(id)"]+1),5,”0″,STR_PAD_LEFT ); 其中$maxid[0]["max(id)"]+1) 是利用max函数从数据库中找也ID最大的一个值, ID为主键,不会重复。 str_pad() 函数把字符串填充为指...2013-10-04
- 下面小编就为大家带来一篇JS生成某个范围的随机数【四种情况详解】。小编觉得挺不错的,现在分享给大家,也给大家做个参考,一起跟随小编过来看看吧...2016-04-22
- 这篇文章主要介绍了C#生成Word文档代码示例,本文直接给出代码实例,需要的朋友可以参考下...2020-06-25
- 本文主要介绍了Vue组件文档生成工具库的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-08-11
- 这篇文章主要介绍了PHP简单实现生成txt文件到指定目录的方法,简单对比分析了PHP中fwrite及file_put_contents等函数的使用方法,需要的朋友可以参考下...2016-04-28
- 这款批量生成缩略图代码可以生成指定大小的小图哦,并且支持文件批量上传。 这款教程会用到php文件 view.php config.php funs.php index.php 功能: -------...2016-11-25
- 这篇文章主要介绍了C#实现为一张大尺寸图片创建缩略图的方法,涉及C#创建缩略图的相关图片操作技巧,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了史上最简洁C# 生成条形码图片思路及示例分享,需要的朋友可以参考下...2020-06-25
- if( isset($_FILES['upImg']) ) { if( $userGroup[$loginArr['group']]['upload'] == 0 ) { echo '{"error":"您所在的用户组无权上传图片!"}'; } else...2016-11-25
- $doc = new domdocument('1.0'); // we want a nice output $doc->formatoutput = true; 代码如下 复制代码 $root = $doc->createelement('bo...2016-11-25