Rumah pembangunan bahagian belakang tutorial php 用GD图库生成横竖柱状图折线图的类_PHP

用GD图库生成横竖柱状图折线图的类_PHP

Jun 01, 2016 pm 12:34 PM
Galeri menjana

最近写的一个GD图库用以生成横竖柱状图和折线图的类库,算是一个教学例程吧  

Class ImageReport{
var $X;//图片大小X轴
var $Y;//图片大小Y轴
var $R;//背影色R值
var $G;//...G.
var $B;//...B.
var $TRANSPARENT;//是否透明1或0
var $IMAGE;//图片对像
//-------------------
var $ARRAYSPLIT;//指定用于分隔数值的符号
var $ITEMARRAY;//数值
var $REPORTTYPE;//图表类型,1为竖柱形2为横柱形3为折线形
var $BORDER;//距离
//-------------------
var $FONTSIZE;//字体大小
var $FONTCOLOR;//字体颜色
//--------参数设置函数
function setImage($SizeX,$SizeY,$R,$G,$B,$Transparent){
$this->X=$SizeX;  
$this->Y=$SizeY;  
$this->R=$R;  
$this->G=$G;  
$this->B=$B;  
$this->TRANSPARENT=$Transparent;  
}  
function setItem($ArraySplit,$ItemArray,$ReportType,$Border){  
$this->ARRAYSPLIT=$ArraySplit;  
$this->ITEMARRAY=$ItemArray;  
$this->REPORTTYPE=$ReportType;  
$this->BORDER=$Border;  
}  
function setFont($FontSize){  
$this->FONTSIZE=$FontSize;  
}  
//----------------主体  
function PrintReport(){  
Header( "Content-type: image/gif");  
//建立画布大小  
$this->IMAGE=ImageCreate($this->X,$this->Y);  
//设定画布背景色  
$background=ImageColorAllocate($this->IMAGE,$this->R,$this->G,$this->B);  
if($this->TRANSPARENT=="1"){  
//背影透明  
Imagecolortransparent($this->IMAGE,$background);  
}else{  
//如不要透明时可填充背景色  
ImageFilledRectangle($this->IMAGE,0,0,$this->X,$this->Y,$background);  
}  
//参数字体文小及颜色  
$this->FONTCOLOR=ImageColorAllocate($this->IMAGE,255-$this->R,255-$this->G,255-$this->B);  
Switch ($this->REPORTTYPE){  
case "0":  
break;  
case "1":  
$this->imageColumnS();  
break;  
case "2":  
$this->imageColumnH();  
break;  
case "3":  
$this->imageLine();  
break;  
}  
$this->printXY();  
$this->printAll();  
}  
//-----------打印XY坐标轴  
function printXY(){  
//画XY坐标轴*/  
$color=ImageColorAllocate($this->IMAGE,255-$this->R,255-$this->G,255-$this->B);  
$xx=$this->X/10;  
$yy=$this->Y-$this->Y/10;  
ImageLine($this->IMAGE,$this->BORDER,$this->BORDER,$this->BORDER,$this->Y-$this->BORDER,$color);//X轴  
ImageLine($this->IMAGE,$this->BORDER,$this->Y-$this->BORDER,$this->X-$this->BORDER,$this->Y-$this->BORDER,$color);//y轴  
//Y轴上刻度  
$rulerY=$this->Y-$this->BORDER;  
while($rulerY>$this->BORDER*2){  
$rulerY=$rulerY-$this->BORDER;  
ImageLine($this->IMAGE,$this->BORDER,$rulerY,$this->BORDER-2,$rulerY,$color);  
}  
//X轴上刻度  
$rulerX=$rulerX+$this->BORDER;  
while($rulerXX-$this->BORDER*2)){  
$rulerX=$rulerX+$this->BORDER;  
//ImageLine($this->IMAGE,$this->BORDER,10,$this->BORDER+10,10,$color);  
ImageLine($this->IMAGE,$rulerX,$this->Y-$this->BORDER,$rulerX,$this->Y-$this->BORDER+2,$color);  
}  
}  

//--------------竖柱形图  
function imageColumnS(){  
$item_array=Split($this->ARRAYSPLIT,$this->ITEMARRAY);  
$num=Count($item_array);  
$item_max=0;  
for ($i=0;$i$item_max=Max($item_max,$item_array[$i]);
}
$xx=$this->BORDER*2;  
//画柱形图  
for ($i=0;$isrand((double)microtime()*1000000);
if($this->R!=255 && $this->G!=255 && $this->B!=255){  
$R=Rand($this->R,200);  
$G=Rand($this->G,200);  
$B=Rand($this->B,200);  
}else{  
$R=Rand(50,200);  
$G=Rand(50,200);  
$B=Rand(50,200);  
}  
$color=ImageColorAllocate($this->IMAGE,$R,$G,$B);  
//柱形高度  
$height=($this->Y-$this->BORDER)-($this->Y-$this->BORDER*2)*($item_array[$i]/$item_max);  
ImageFilledRectangle($this->IMAGE,$xx,$height,$xx+$this->BORDER,$this->Y-$this->BORDER,$color);  
ImageString($this->IMAGE,$this->FONTSIZE,$xx,$height-$this->BORDER,$item_array[$i],$this->FONTCOLOR);  
//用于间隔  
$xx=$xx+$this->BORDER*2;  
}  
}  

//-----------横柱形图  
function imageColumnH(){  
$item_array=Split($this->ARRAYSPLIT,$this->ITEMARRAY);  
$num=Count($item_array);  
$item_max=0;  
for ($i=0;$i$item_max=Max($item_max,$item_array[$i]);
}
$yy=$this->Y-$this->BORDER*2;  
//画柱形图  
for ($i=0;$isrand((double)microtime()*1000000);
if($this->R!=255 && $this->G!=255 && $this->B!=255){  
$R=Rand($this->R,200);  
$G=Rand($this->G,200);  
$B=Rand($this->B,200);  
}else{  
$R=Rand(50,200);  
$G=Rand(50,200);  
$B=Rand(50,200);  
}  
$color=ImageColorAllocate($this->IMAGE,$R,$G,$B);  
//柱形长度  
$leight=($this->X-$this->BORDER*2)*($item_array[$i]/$item_max);  
ImageFilledRectangle($this->IMAGE,$this->BORDER,$yy-$this->BORDER,$leight,$yy,$color);  
ImageString($this->IMAGE,$this->FONTSIZE,$leight+2,$yy-$this->BORDER,$item_array[$i],$this->FONTCOLOR);  
//用于间隔  
$yy=$yy-$this->BORDER*2;  
}  
}  

//--------------折线图  
function imageLine(){  
$item_array=Split($this->ARRAYSPLIT,$this->ITEMARRAY);  
$num=Count($item_array);  
$item_max=0;  
for ($i=0;$i$item_max=Max($item_max,$item_array[$i]);
}
//$xx=$this->BORDER;  
//画柱形图  
for ($i=0;$isrand((double)microtime()*1000000);
if($this->R!=255 && $this->G!=255 && $this->B!=255){  
$R=Rand($this->R,200);  
$G=Rand($this->G,200);  
$B=Rand($this->B,200);  
}else{  
$R=Rand(50,200);  
$G=Rand(50,200);  
$B=Rand(50,200);  
}  
$color=ImageColorAllocate($this->IMAGE,$R,$G,$B);  
//柱形高度  
$height_now=($this->Y-$this->BORDER)-($this->Y-$this->BORDER*2)*($item_array[$i]/$item_max);  
if($i!="0"){  
ImageLine($this->IMAGE,$xx,$height_next,$xx+$this->BORDER,$height_now,$color);  
}  
ImageString($this->IMAGE,$this->FONTSIZE,$xx+$this->BORDER,$height_now-$this->BORDER/2,$item_array[$i],$this->FONTCOLOR);  
$height_next=$height_now;  
//用于间隔  
$xx=$xx+$this->BORDER;  
}  
}  

//--------------完成打印图形YeMaoSheng.com  
function printAll(){  
ImageGIF($this->IMAGE);  
ImageDestroy($this->IMAGE);  
}  
//--------------调试  
function debug(){  
echo "X:".$this->X."
Y:".$this->Y;  
echo "
BORDER:".$this->BORDER;  
$item_array=split($this->ARRAYSPLIT,$this->ITEMARRAY);  
$num=Count($item_array);  
echo "
数值个数:".$num."
数值:";  
for ($i=0;$iecho "
".$item_array[$i];  
}  
}  
}  

$report=new ImageReport;  
$report->setImage(600,300,255,255,255,1);//参数(长,宽,背影色R,G,B,是否透明1或0)  
$temparray="50,25,100,250,180,200,150,220,200,150,50,25,100,250,180,200,150,220,200,150";//数值,用指定符号隔开  
$report->setItem(',',$temparray,3,20);//参数(分隔数值的指定符号,数值变量,样式1为竖柱图2为横柱图3为折线图,距离)  
$report->setFont(1);//字体大小1-10  
$report->PrintReport();  
//$report->debug();//调式之用  
?>

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menjana tarikh rawak k antara dua tarikh menggunakan Python? Bagaimana untuk menjana tarikh rawak k antara dua tarikh menggunakan Python? Sep 09, 2023 pm 08:17 PM

Menjana data rawak adalah sangat penting dalam bidang sains data. Daripada membina ramalan rangkaian saraf, data pasaran saham, dsb., tarikh biasanya digunakan sebagai salah satu parameter. Kita mungkin perlu menjana nombor rawak antara dua tarikh untuk analisis statistik. Artikel ini akan menunjukkan cara menjana k tarikh rawak antara dua tarikh tertentu menggunakan modul rawak dan datetime ialah perpustakaan terbina dalam Python untuk mengendalikan masa. Sebaliknya, modul rawak membantu dalam menjana nombor rawak. Jadi kita boleh menggabungkan modul rawak dan masa tarikh untuk menjana tarikh rawak antara dua tarikh. Syntax random.randint (mula, tamat, k) rawak di sini merujuk kepada pustaka rawak Python. Kaedah randint menggunakan tiga perkara penting

Cara menjana kod pengesahan imej yang boleh dimuat semula menggunakan PHP Cara menjana kod pengesahan imej yang boleh dimuat semula menggunakan PHP Sep 13, 2023 am 11:54 AM

Cara menggunakan PHP untuk menjana kod pengesahan imej yang boleh dimuat semula Dengan pembangunan Internet, untuk mengelakkan serangan berniat jahat dan operasi mesin automatik, banyak tapak web menggunakan kod pengesahan untuk pengesahan pengguna. Satu jenis kod pengesahan yang biasa ialah kod pengesahan imej, yang menghasilkan gambar yang mengandungi aksara rawak dan memerlukan pengguna memasukkan aksara yang betul sebelum meneruskan. Artikel ini akan memperkenalkan cara menggunakan PHP untuk menjana kod pengesahan imej yang boleh dimuat semula dan memberikan contoh kod khusus. Langkah 1: Buat imej kod pengesahan Mula-mula, kita perlu mencipta imej kod pengesahan

Bagaimana untuk melakukan penjanaan bahasa semula jadi asas menggunakan PHP Bagaimana untuk melakukan penjanaan bahasa semula jadi asas menggunakan PHP Jun 22, 2023 am 11:05 AM

Penjanaan bahasa semula jadi ialah teknologi kecerdasan buatan yang menukar data kepada teks bahasa semula jadi. Dalam era data besar hari ini, semakin banyak perniagaan perlu menggambarkan atau mempersembahkan data kepada pengguna, dan penjanaan bahasa semula jadi ialah kaedah yang sangat berkesan. PHP ialah bahasa skrip sebelah pelayan yang sangat popular yang boleh digunakan untuk membangunkan aplikasi web. Artikel ini akan memperkenalkan secara ringkas cara menggunakan PHP untuk penjanaan bahasa semula jadi asas. Memperkenalkan perpustakaan penjanaan bahasa semula jadi Pustaka fungsi yang disertakan dengan PHP tidak termasuk fungsi yang diperlukan untuk penjanaan bahasa semula jadi, jadi

Tidak lagi bimbang tentang dihentikan oleh bos anda untuk mesyuarat kecil sebelum berhenti kerja. Pembantu AI akan membantu anda menjana minit mesyuarat secara automatik. Tidak lagi bimbang tentang dihentikan oleh bos anda untuk mesyuarat kecil sebelum berhenti kerja. Pembantu AI akan membantu anda menjana minit mesyuarat secara automatik. Sep 04, 2023 pm 11:21 PM

iFlytek telah menaik taraf fungsi minit mesyuarat, yang boleh menukar secara langsung ungkapan pertuturan kepada draf bertulis, dan AI boleh meringkaskan minit mesyuarat berdasarkan rakaman. AI boleh membantu anda melengkapkan penulisan minit mesyuarat Pada 31 Ogos, versi web iFlytek telah dinaik taraf, menambah fungsi rakaman masa nyata pada bahagian PC, yang boleh menggunakan kecerdasan buatan untuk menjana minit mesyuarat secara bijak. Pelancaran fungsi ini akan meningkatkan kecekapan pengguna dalam menyusun kandungan dan membuat susulan ke atas item kerja utama selepas mesyuarat. Bagi orang yang sering menghadiri mesyuarat, fungsi ini sudah pasti alat yang sangat praktikal yang boleh menjimatkan banyak masa dan tenaga Senario aplikasi fungsi ini adalah terutamanya untuk menukar rakaman pada PC kepada teks dan menjana minit mesyuarat secara automatik, bertujuan untuk menyediakan. pengguna dengan kualiti terbaik Produk dengan perkhidmatan terbaik dan teknologi paling canggih untuk meningkatkan kecekapan pejabat dengan cepat

Hasilkan carta wafel menggunakan pyWaffle dalam Python Hasilkan carta wafel menggunakan pyWaffle dalam Python Aug 17, 2023 am 11:49 AM

Visualisasi data adalah penting untuk pemahaman dan pembentangan maklumat yang cekap. Di antara banyak jenis carta yang tersedia, carta wafel ialah cara baharu untuk memaparkan data dalam struktur seperti grid dengan jubin segi empat sama. Modul Python yang berkuasa PyWaffle memudahkan pembangunan carta wafel, serupa dengan banyak kaedah pengiraan dan analisis data. Dalam artikel ini, kita akan melihat cara membuat carta wafel menggunakan modul Python PyWaffle yang canggih. Mari pasang PyWafle dan lihat cara menggunakannya untuk menggambarkan data kategori. Jalankan arahan berikut dalam cmd anda untuk memasang perpustakaan dan kemudian mengimportnya ke dalam kod anda Terjemahan bahasa Cina bagi pipinstallpywaffleExample1 ialah: Contoh 1 Dalam contoh ini, kami

Bagaimana untuk menjana kod QR dengan had masa menggunakan PHP? Bagaimana untuk menjana kod QR dengan had masa menggunakan PHP? Aug 26, 2023 pm 04:34 PM

Bagaimana untuk menjana kod QR dengan had masa menggunakan PHP? Dengan populariti pembayaran mudah alih dan tiket elektronik, kod QR telah menjadi teknologi biasa. Dalam banyak senario, kami mungkin perlu menjana kod QR dengan had masa, yang akan menjadi tidak sah walaupun selepas tempoh masa tertentu. Artikel ini akan memperkenalkan cara menggunakan PHP untuk menjana kod QR terhad masa dan menyediakan contoh kod untuk rujukan. Memasang perpustakaan PHPQRCode Untuk menggunakan PHP untuk menjana kod QR, kita perlu memasang perpustakaan PHPQRCode terlebih dahulu. perpustakaan ini

Bagaimana untuk menjana buku jawapan yang salah untuk kuiz dalam talian Bagaimana untuk menjana buku jawapan yang salah untuk kuiz dalam talian Sep 25, 2023 am 10:24 AM

Bagaimana untuk menghasilkan buku ralat untuk menjawab soalan dalam talian Dalam era maklumat hari ini, menjawab soalan dalam talian telah menjadi tugas biasa bagi kebanyakan pelajar dan pendidik. Soalan yang salah selalu menjadi salah satu masalah dalam proses pembelajaran Ramai orang berharap dengan mudah menjana buku jawapan yang salah untuk jawapan dalam talian supaya mereka boleh menyemak dan menguasai ilmu dengan lebih baik. Artikel ini akan memperkenalkan cara merealisasikan fungsi penjanaan buku ralat jawapan dalam talian melalui pengaturcaraan, dan memberikan contoh kod khusus. Langkah 1: Bina antara muka web untuk menjana jawapan dalam talian dan buku kecil ralat Anda memerlukan antara muka web untuk memaparkan soalan dan jawapan. Boleh guna HTML

Perkara yang perlu dilakukan jika direktori perkataan dijana secara tidak betul Perkara yang perlu dilakukan jika direktori perkataan dijana secara tidak betul Feb 20, 2024 am 08:08 AM

Apa yang perlu dilakukan jika jadual kandungan perkataan dijana dengan tidak betul Dengan perkembangan teknologi, dokumen elektronik telah menjadi bahagian yang sangat diperlukan dalam kerja dan kajian harian kita. Apabila menyunting dokumen elektronik, terutamanya artikel atau kertas panjang, penjanaan jadual kandungan adalah langkah yang sangat penting. Jadual kandungan boleh memudahkan pembaca mencari kandungan dan struktur artikel dan meningkatkan kecekapan membaca. Walau bagaimanapun, kadangkala kami menghadapi beberapa masalah dalam proses penjanaan katalog, seperti ralat penjanaan katalog, susunan tidak teratur, dsb. Jadi, jika direktori perkataan dijana secara tidak betul, bagaimanakah kita harus menyelesaikannya? kepala

See all articles