1. 程式人生 > >15.處理影象(案例:驗證碼+縮圖+載入系統字型+載入已有的圖片)

15.處理影象(案例:驗證碼+縮圖+載入系統字型+載入已有的圖片)

在PHP5中的php.ini檔案中包含了GD擴充套件包,只需要取代平GD擴充套件包的相應註釋就可以正常使用。

PHP5包含的GD庫正是升級的GD2庫,其中包含了支援真彩圖像處理的有用的JPG功能,

   生成的圖形,通過PHP的文件格式進行存放,還可以通過HTML的圖片插入方式SRC來獲取動態圖形。

簡單的,如驗證碼、水印、微縮圖。

1、建立影象

一般情況下,生成的影象可以是png、jpg、gif、bmp、jpeg、wbmp

一般流程如下:

(1)設定標頭header,即告訴瀏覽器要生成的MIME型別

(2)建立一個影象區域,以後的操作都基於該影象區域;

(3)在空白影象區域繪製填充背景;

(4)在背景上繪製圖形輪廓輸入文字;

(5)輸出最終圖形

(6)清除所有的資源;

(7)其他頁面呼叫影象。

案例1:demo1.php,表示建立一個影象的基本流程,如下——

<?php

//第一步,設定檔案MIME型別,輸出型別text/html型別是網頁型別,預設可以不寫
//將輸出型別改為影象流
//header('Content-Type:image/wbmp;');  //自動儲存
header('Content-Type:image/png;');   //不會自動儲存

//第二步,建立一個圖形區域,即影象背景
//有兩種建立方式
//1、imagecreate——新建一個基於調色的影象,對於資源型別,一般要加上@符號,防止出錯
//imagecreate(200, 200);
//2、imagecreatetruecolor(200,200);
//該函式建立了一個影象區域,當沒有進行填充的時候,預設的是一個黑色區域。
//返回的是一個資源控制代碼
$im=imagecreatetruecolor(200, 200);


//第三步,在空白影象區域,繪製顏色、文字、線條等
//填充色換掉,首先必須有個顏色填充器
//imagecolorallocate——為一副影象分配顏色
$blue=imagecolorallocate($im, 0, 102, 255);
//將這個blue顏色填充到背景上去;
//函式imagefill——區域填充
imagefill($im, 0, 0, $blue);

//第四步,在藍色的背景上輸入一些線條、文字等
$white=imagecolorallocate($im, 255, 255, 255);
//imageline———畫一條線段
imageline($im, 0, 0, 200, 200, $white);
imageline($im, 200, 0, 0, 200, $white);
//imagestring———水平的畫一行字串
imagestring($im, 5, 80, 20, 'Mr.Lee', $white);


//第五步,輸出最終圖形;
imagepng($im);

//第六步,將所有的資源清空;
imagedestroy($im);
?>
案例2:demo2.php,表示在其他位置載入demo1.php建立的影象的方式
<?php
//src可以插入各種型別的圖片
//demo1.php其實就是一張png圖片
header('Content-Type:text/html;charset=gbk');

echo '<img src="demo1.php" alt="圖形" title="圖形" />';
?>


2、簡單的小案例

(1)簡單的驗證碼

a、思想——

   首先,建立一個影象,作為背景,見1中的demo1.php,

   其次,再利用for迴圈,“隨機數”產生一個隨機的四位數,

例如——“echo mt_rand(0, 100);

(注意:該四位數原理是把一個十進位制的數,轉換為一個十六進位制的數,以“字母a-f + 數字0-9”表示)

將十進位制轉為十六進位制—— dechex()

    最後,再調整隨機數在影象的位置,進行居中。

案例2-1:簡單的驗證碼

<?php
//簡單的驗證碼

//隨機數
//echo mt_rand(0, 100);

//為什麼要迴圈0-15之間的數字for
//因為要實現最簡單的字母和數字的混搭;

//16進位制——0-9  a—f
//將10進位制轉換為16進位制的函式——dechex()

//建立一個四位數的驗證碼
for ($i=0;$i<4;$i++){
    $nmsg .=dechex(mt_rand(0, 15));//表示產生一個0-15的隨機數,並將10進位制轉為16進位制
}

//設定MIME型別;
header('Content-Type:image/png');

//建立一個背景區域;
$im=imagecreatetruecolor(75, 25);

//在空白區域繪製圖像、文字
//繪製顏色填充器
$blue=imagecolorallocate($im, 0, 105, 255);
$white=imagecolorallocate($im, 255, 255, 255);

//imagefill填充背景
imagefill($im, 0, 0, $blue);

//imagestring填充字串
imagestring($im, 5, 20, 4, $nmsg, $white);

//imagepng
imagepng($im);

//銷燬圖片;
imagedestroy($im);

?>

(2)載入已有的影象

a、設定MIME格式為“image/png”或“image/jpeg”

b、利用魔法常量“_FILE_”

c、新建一個影象imagecrateformpng()

案例2-2:

<?php
define('_DIR_', dirname(_FILE_).'\\');

//載入已有的影象;
header('Content-Type:image/png');

//imagecreateformpng——從png檔案或url中新建一個影象
//用image載入影象,是可以進行編輯的;
//在載入影象中,加入水印

//通過魔法常量_FILE_
//echo dirname(_FIFE_);

$im=imagecreateformpng(_DIR_.'');
$white=imagecolorallocate($im, 255, 255, 255);
imagestring($im, 5, 10, 10, 'http://www.csdn.net/zxy', $white);

imagepng($im);
imagedestroy($im);
?>

(3)載入已有的系統字型

a、設定字型iconv();

b、採用系統字型檔案並設定其樣式,即imagettftext()

案例2-3:

<?php

define('_DIR_', dirname(_FILE_).'\\');
//載入已有的影象;
header('Content-Type:image/png');
//從PNG檔案或url新建一個影象;
$im=imagecreateformpng(_DIR_.'m.png');
$white=imagecolorallocate($im, 255, 255, 255);
//字型檔案;
$text=iconv('gbk','utf-8','陸海華');
//font字型必須支援中文;
$font='C:\author\s';
//採用系統提供的字型
//第二個引數為字型的大小,第三個引數為旋轉的角度,第四五個引數為x、y值;
imagettftext($im, 40, 30, 50, 100, $white, $font, 'hello');

imagepng($im);
imagedestroy($im);

?>


(4)縮圖

所謂的縮圖,即不僅表面的大小改變了,且其容量也改變了。

a、getimagesize()表示取得影象的大小

b、list()函式表示取得原圖的長度和高度

c、imagecreateformjpeg()將原圖複製到新圖上

d、imagecopyresampled()表示將原圖重新取樣,複製到新圖上去。

案例2-4:縮圖

<?php

//微縮圖,不但表面的大小改變了,其次容量也改變了;
//是真的改變了,而不是表面的縮小;
define('_DIR_', dirname(__FILE__).'\\');
//header('Content-Type:image/png');
header('Content-Type:image/jpeg');

//getimagesize——取得影象的大小;
//獲得原圖的長度和高度——list();
//list($width,$height)=getimagesize(_DIR_.'m.png');
list($width,$height)=getimagesize(_DIR_.'m.jpg');

//將原圖縮放成40%;
$_width=$width*0.4;
$_height=$heught*0.4;

//建立一個新圖;
$im=imagecreatetruecolor($_width, $_height);

//下面的工作是,載入新圖,將原圖複製到新圖上去;
//載入原圖;
//1.png
//$_im=imagecreatefrompng(_DIR_.'m.png');
//2.jpeg
$_im=imagecreatefromjpeg(_DIR_.'m.jpg');


//將原圖重新取樣,拷貝到原圖上去,
//imagecopyresampled——重新取樣拷貝部分影象並調整大小;
imagecopyresampled($im, $_im, 0, 0, 0, 0, $_width, $_height, $width, $height);

//將新圖輸出;
//1.imagepng(),全部為高清圖片。
//imagepng($im);
//2.imagejpeg()第二個引數不需要,直接null過度,第三個引數是0-100來調節jpg的清晰度。
imagejpeg($im,null,100);

//銷燬;
imagedestroy($im);
imagedestroy($_im);
?>

解析——png、jpeg區別

(1)png表示“.php”檔案,且全部高清

(2)jpeg表示的影象檔案有清晰度可言

相關推薦

15.處理影象案例驗證++載入系統字型+載入有的圖片

在PHP5中的php.ini檔案中包含了GD擴充套件包,只需要取代平GD擴充套件包的相應註釋就可以正常使用。 PHP5包含的GD庫正是升級的GD2庫,其中包含了支援真彩圖像處理的有用的JPG功能,  

《JAVA繼承與多型》【Person、Student、Employee類】此題在書上原題基礎上修改設計一個名為Person的類和它的兩個名為Student和Employee子類。

題目:【Person、Student、Employee類】(注:此題在書上原題基礎上有修改)設計一個名為Person的類和它的兩個名為Student和Employee子類。 每個人都有姓名和電話號碼。學生有年級狀態(大一、大二、大三或大四)。將這些狀態定義為常

動態HTML處理和機器影象識別-----案例嘗試對驗證進行機器識別處理

嘗試對知乎網驗證碼進行處理: 許多流行的內容管理系統即使加了驗證碼模組,其眾所周知的註冊頁面也經常會遭到網路 機器人的垃圾註冊。 那麼,這些網路機器人究,竟是怎麼做的呢?既然我們已經,可以成功地識別出儲存在電腦上 的驗證碼了,那麼如何才能實現一個全能的網路機器人呢? 大多數網站生成的驗證碼圖片都具有以下

Servlet案例3驗證功能

font des esp https src method imp err 用戶 這裏介紹簡單的驗證碼功能 動態生成圖片 一個簡單的頁面: <!DOCTYPE html> <html> <head> <meta charse

微信伺服器配置的一點點經驗內含驗證伺服器出現token驗證失敗的處理,接收事件出現XML格式錯誤,微信網頁授權獲取 access token 報錯40125

首先需要多些網上的大神 連結:https://bbs.csdn.net/topics/390991193 ; https://blog.csdn.net/sinat_22878395/article/details/69258165 ; https://blog.csdn.net/hangh

Python入門驗證破解

一、定位驗證碼元素 二、下載驗證圖片 三、破解驗證碼 #test.py from selenium import webdriver import os import urllib from PIL import Image import pytes

Python-OpenCV 處理影象基本操作 cv2

0x00. 圖片讀、寫和顯示操作 安裝好 OpenCV 之後,首先嚐試載入一張最簡單的圖片並顯示出來,程式碼示例: 第一種方式使用cv2.cv的LoadImage、ShowImage和SaveImage函式 import cv2.cv as cv # 讀圖片 image=cv.LoadImage('img

Python-OpenCV 處理影象影象畫素點操作

https://segmentfault.com/a/1190000003742442 0x01. 畫素 有兩種直接操作圖片畫素點的方法: 第一種辦法就是將一張圖片看成一個多維的list,例如對於一張圖片im,想要操作第四行第四列的畫素點就直接 im[3,3] 就可以獲取到這個點的RGB值。 第二種就是

驗證實現方式-------js實現驗證

一.js實現驗證碼: 第一步:建一個login.htm,一個code.js檔案,一個code.css檔案,準備一張圖片code.jpg 第二步:編寫login.htm檔案,內容為: <html>     <head>     <script

Python爬蟲學習4requests.post模擬登入豆瓣包括獲取驗證

1.  在豆瓣登入網頁嘗試登入後開啟開發者工具,可以查詢後去Headers和Form Data資訊。2. 實現程式碼import requests import html5lib import re from bs4 import BeautifulSoup s = re

Python-OpenCV 處理影象基本操作

0x00. 圖片讀、寫和顯示操作 安裝好 OpenCV 之後,首先嚐試載入一張最簡單的圖片並顯示出來,程式碼示例: 第一種方式使用cv2.cv的LoadImage、ShowImage和SaveImage函式 import cv2.cv as cv # 讀圖片 image=

Selenium十四處理登錄框的驗證

測試環境 str 方案 lee 圖片驗證碼 input jpg 隨機 user 對於 web 應用來說,大部分的系統在用戶登錄時都要求用戶輸入驗證碼,驗證碼的類型的很多,有字母數字的,有漢字的,甚至還要用戶輸入一條算術題的答案的,對於系統來說使用驗證碼可以有效果的防

Java8新特性——lambda表達式.案例詞頻統計

word ont lose args list lower cep stream spa 需求:讀入一個文本文件,確定所有單詞的使用頻率並從高到低排序,打印出所有單詞及其頻率的排序列表 先用傳統方法解: 1 package cn._1.wordfrequency; 2

Java8新特性——lambda表達式.案例完全數分類

完全 boolean lte arraylist efi def oid 輸入 class 需求:輸入一個數,判斷其類型(完全數,過剩數,不足數) 完全數:自身之外所有因數和==自身 過剩數:自身之外所有因數和>自身 不足數:自身之外所有因數和<自身 1 p

ThinkPhp框架驗證功能

== 想要 重新 rand 註意 檢測 brush true cti Think\Verify類可以支持驗證碼的生成和驗證功能。 為了顯示這個驗證碼功能,第一要有控制器,再就是有方法,然後是顯示的頁面。 一、最簡單的方式生成驗證碼 (1)我們還是繼續在那個控制器編寫方法

實驗一任務四驗證問題

連接 num 轉換 ssa 次循環 random 空字符串 輸出 字符串 package shiyansi; import javax.swing.JOptionPane;public class RandomStr { public static void main(S

簡單的Session案例 —— 一次性驗證

exception value ttr app abc [] gre dom 數字 一次性驗證碼的主要目的就是為了限制人們利用工具軟件來暴力猜測密碼,其原理與利用Session防止表單重復提交的原理基本一樣,只是將表單標識號變成了驗證碼的形式,並且要求用戶將提示的驗證碼

node.js使用superagent實現模擬登陸功能包含下載驗證功能

ssa split 輸入 spa code ike utf RM lang superagent版本:3.8.3 樣例代碼: var process = require(‘process‘); var superagent = require(‘superagent‘);

Struts2自定義攔截器案例驗證使用者是否登入攔截器

Struts攔截器是struts最強大的功能之一,也是他的核心 它可以在Action前後做一些事情,比如使用者登入驗證,這裡主要針對使用者登入配置詳細說明 一 首先自定義一個使用者攔截類,必須實現Interceptor介面或者繼承他的實現類 因為我們是要攔截使用者登入的,這裡繼承Meth

Python爬蟲基礎驗證的爬取和識別詳解

今天要給大家介紹的是驗證碼的爬取和識別,不過只涉及到最簡單的圖形驗證碼,也是現在比較常見的一種型別。 執行平臺:Windows Python版本:Python3.6 IDE: Sublime Text 其他:Chrome瀏覽器 簡述流程: 步驟1:簡單介紹驗證碼 步驟2: