首頁 後端開發 php教程 Linux下的编程 PHP高级技巧全放送(三)_PHP

Linux下的编程 PHP高级技巧全放送(三)_PHP

Jun 01, 2016 pm 12:25 PM
使用 創建 影像 技巧 文件 程式設計 進階

Linux技巧


  六、动态图像的创建
  
  只要安装一些第三方的库文件并具有一定的几何知识,就可以利用PHP来创建和处理图像了。事实上,这不需要太多的几何知识,因为我大学没有毕业,仍然可以利用PHP创建图像。
  
  在使用基本的图像创建函数之前,需要安装GD库文件。如果要使用与JPEG有关的图像创建函数,还需要安装jpeg-6b,如果要在图像中使用Type 1型字体,则必须安装t1lib。
  
  在建立图像创建环境之前,还需要作一些准备工作。首先,安装t1lib;其次安装jpeg-6b,然后再安装GD库文件。在安装时一定要按这里给定的顺序进行安装,因为在编译GD为库时会用到jpeg-6b,如果没有安装jpeg-6b,在编译时就会出错。
  
  在安装完这三个组件后,还需要重新配置PHP,这也是你对采用DSO方式安装PHP感到庆幸的地方之一。运行make clean,然后在当前的配置中添加下面的内容:
  
  --with-gd=[/path/to/gd]
  --with-jpeg-dir=[/path/to/jpeg-6b]
  --with-t1lib=[/path/to/t1lib]
  
  完成添加后执行make命令,然后再执行make install命令。重新启动Apache后运行phpinfo()来检查一下新的设置是否生效了。现在就可以开始图像创建工作了。
  
  根据所安装的GD库文件的版本不同,你也许能或者不能创建GIF或PNG格式的图形文件,如果安装的是gd-1.6或以前的版本,可以使用GIF格式的文件但不能创建PNG格式,如果安装的是gd-1.6以后的版本,可以创建PNG文件但不能创建GIF格式的文件。
  
  创建一幅简单的图像也需要用到许多的函数,我们将一步一步地进行说明。
  
  在这个例子中,我们将创建一个PNG格式的图像文件,下面的代码是一个包含所创建的图像的MIME类型的头部:
  
   header ("Content-type: image/png");
  
  使用ImageCreate()创建一个代表空白图像的变量,这个函数要求以像素为单位的图像大小的参数,其格式是ImageCreate(x_size, y_size)。如果要创建一个大小为250X250的图像,就可以使用下面的语句:
  $newImg = ImageCreate(250,250);
  
  由于图像还是空白的,因此你可能会希望用一些彩色来填充它。然而,你需要首先使用ImageColorAllocate()函数用其RGB值为这种颜色指定一个名字,这一函数的格式为ImageColorAllocate([image], [red], [green], [blue])。如果要定义天蓝色,可以使用如下的语句:
  $skyblue = ImageColorAllocate($newImg,136,193,255);
  
  接下来,需要使用ImageFill()函数用这种颜色填充这个图像,ImageFill()函数有几个版本,例如ImageFillRectangle()、ImageFillPolygon()等。为简单起见,我们通过如下的格式使用ImageFill()函数:
  ImageFill([image], [start x point], [start y point], [color])
  ImageFill($newImg,0,0,$skyblue);
  
  最后,建立图像后释放图像句柄和所占用的内存:
  ImagePNG($newImg);
  ImageDestroy($newImg); ?>
  
  这样,创建图像的全部代码如下所示:
   header ("Content-type: image/png");
  $newImg = ImageCreate(250,250);
  $skyblue = ImageColorAllocate($newImg,136,193,255);
  ImageFill($newImg,0,0,$skyblue);
  ImagePNG($newImg);
  ImageDestroy($newImg);
  ?>
  
  如果把这个脚本文件保存为skyblue.php,并用浏览器访问它,就会看到一个天蓝色的250X250的PNG格式的图像。
  
  我们还可以使用图像创建函数对图像进行处理,例如把一个较大图像作成一个小图像:
  
  假设你有一幅图像,想从中裁剪出一个35X35大小的图像。你所需要作的是创建一个35X35大小的空白图像,创建一个包含原来图像的图像流,然后把一个经过调整大小的原来的图像放到新的空白图像中。
  
  要完成这一任务的关健函数是ImageCopyResized(),它要求的格式如下所示:
  ImageCopyResized([new image handle],[original image handle],[new image X], [new Image Y], [original image X], [original image Y], [new image X], [new image Y], [original image X], [original image Y])
  
   /* 发送一个头部,以便让浏览器知道该文件所包含的内容类型*/
  header("Content-type: image/png");
  /* 建立保存新图像高度和宽度的变量*/
  $newWidth = 35;
  $newHeight = 35;
  /* 建立给定高度和宽度的新的空白图像*/
  $newImg = ImageCreate($newWidth,$newHeight);
  /* 从原来较大的图像中得到数据*/
  $origImg = ImageCreateFromPNG("test.png");
  /*拷贝调整大小后的图像,使用ImageSX()、ImageSY()得到原来的图像在X、Y方面上的大小 */
  ImageCopyResized($newImg,$origImg,0,0,0,0,$newWidth,$newHeight,ImageSX($origImg),ImageSY($origImg));
  /*创建希望得到的图像,释放内存 */
  ImagePNG($newImg);
  ImageDestroy($newImg); ?>
  
  如果把这一小段脚本保存为resized.php,然后用浏览器对它进行访问,就会看到一个35X35大小的PNG格式的图形。
  
  七、基于PHP的用户认证
  
  如果希望在每一段脚本上都进行口令保护,可以结合使用header()语句、$PHP_AUTH_USER和$PHP_AUTH_PW来建立基本的认证方案,通常的基于服务器的提问/响应顺序都如下所示:
  
  1、用户从服务器上请求一个文件。如果这个文件在服务器上是被保护的,则在响应的头部向用户返回一个401(示经授权的用户)字符串。
  
  2、浏览器收到这个响应后,弹出要求用户输入用户名/口令的对话框。
  
  3、用户在对话框中输入一个用户名和口令,点击OK按钮将信息返回服务器供认证使用。
  
  4、如果用户名和口令有效,被保护的文件将向用户开放,只要用户还在使用文件,认证会一直有效。
  
  一段简单的PHP脚本文件通过向用户发送一个适当的能够引起自动显示用户名/口令对话框的HTTP头部就可以模仿HTTP的提问/响应系统,PHP把用户在用户名/口令对话框中输入的信息存储在$PHP_AUTH_USER和$PHP_AUTH_PW中,使用这二个变量,就可以与存储在文本文件、数据库等文件中的用户名/口令进行比较。
  
  这个例子采用了二个硬编码的值进行认证,但无论用户名和口令放在什么地方,其原理都是相同的。
  
  /* 检查$PHP_AUTH_USER和$PHP_AUTH_PW中的值*/
  if ((!isset($PHP_AUTH_USER)) || (!isset($PHP_AUTH_PW))) {
  /* 如果没有值,则发送一个能够引发对话框出现的头部*/
  header('WWW-Authenticate: Basic realm="My Private Stuff"');
  header('HTTP/1.0 401 Unauthorized');
  echo 'Authorization Required.';
  exit;
  } else if ((isset($PHP_AUTH_USER)) && (isset($PHP_AUTH_PW))){
  /* 变量中有值,检查它们是否正确*/
  if (($PHP_AUTH_USER != "validname") || ($PHP_AUTH_PW != "goodpassword")) {
  /* 如果输入的用户名和口令中有一个不正确,则发送一个能够引发对话框出现的头部 */
  header('WWW-Authenticate: Basic realm="My Private Stuff"');
  header('HTTP/1.0 401 Unauthorized');
  echo 'Authorization Required.';
  exit;
  } else if (($PHP_AUTH_USER == "validname") || ($PHP_AUTH_PW == "goodpassword")) {
  /* 如果二个值都正确,显示成功的信息 */
  echo "

You're authorized!

";
  }
  }
  ?>
  
  需要注意的是,如果你使用的是基于文件的保护机制,它并不能保证目录中所有的文件的安全。它可能保护大部分的文件,如果你认为它能够保护给定目录中的所有文件,你的这种认识就需要变变了。
  
  八、PHP和COM
  
  如果你喜欢冒险,并且在Windows上运行CGI、ISAPI或Apache模块版本的PHP,就可以访问COM的函数。好了,详细解释COM的工作就交给微软和许多大部头的书了,为了能简单地了解一下COM的功能,下面是一小段常见的脚本。
  
  这一段PHP脚本在后端启动微软的字处理Word,打开一个新的文档,输入一些文字,保存文档,并关闭Word。
  
  // 建立一个指向新COM组件的索引
  $word = new COM("word.application") or die("Can't start Word!");
  // 显示目前正在使用的Word的版本号
  echo "Loading Word, v. {$word->Version}
";
  // 把它的可见性设置为0(假),如果要使它在最前端打开,使用1(真)
  // to open the application in the forefront, use 1 (true)
  $word->Visible = 0;
  // 在Word中创建新的文档
  $word->Documents->Add();
  // 在新文档中添加文字
  $word->Selection->TypeText("Testing 1-2-3...");
  //把文档保存在Windows临时目录中
  $word->Documents[1]->SaveAs("/Windows/temp/comtest.doc");
  // 关闭与COM组件之间的连接
  $word->Quit();
  // 在屏幕上显示其他信息
  echo "Check for the file...";
  ?>
  
  如果你有一个intranet网站,数据存储在SQL Server中,用户需要这些数据的Excel格式,则可以让PHP运行必要的SQL查询并对输出进行格式化,然后利用COM打开Excel,把数据转化为Excel格式的数据,然后把数据保存在用户的台式机上。
  
  九、PHP和Java
  
  PHP另一个有趣的功能是它可以调用现有的Java 对象中的方法,使得你可以在基
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

BTCC教學:如何在BTCC交易所綁定使用MetaMask錢包? BTCC教學:如何在BTCC交易所綁定使用MetaMask錢包? Apr 26, 2024 am 09:40 AM

MetaMask(中文也叫小狐狸錢包)是一款免費的、廣受好評的加密錢包軟體。目前,BTCC已支援綁定MetaMask錢包,綁定後可使用MetaMask錢包進行快速登錄,儲值、買幣等,且首次綁定還可獲得20USDT體驗金。在BTCCMetaMask錢包教學中,我們將詳細介紹如何註冊和使用MetaMask,以及如何在BTCC綁定並使用小狐狸錢包。 MetaMask錢包是什麼? MetaMask小狐狸錢包擁有超過3,000萬用戶,是當今最受歡迎的加密貨幣錢包之一。它可免費使用,可作為擴充功能安裝在網絡

使用正規表示式去除 PHP 數組中的重複值 使用正規表示式去除 PHP 數組中的重複值 Apr 26, 2024 pm 04:33 PM

使用正規表示式從PHP數組中移除重複值的方法:使用正規表示式/(.*)(.+)/i匹配並取代重複項。遍歷數組元素,使用preg_match檢查匹配情況。如果匹配,請跳過值;否則,將其添加到無重複值的新數組中。

什麼是Bitget Launchpool?如何使用Bitget Launchpool? 什麼是Bitget Launchpool?如何使用Bitget Launchpool? Jun 07, 2024 pm 12:06 PM

BitgetLaunchpool是一個為所有加密貨幣愛好者而設計的動態平台。 BitgetLaunchpool以其獨特的產品脫穎而出。在這裡,您可以質押您的代幣來解鎖更多獎勵,包括空投、高額回報,以及專屬早期參與者的豐厚獎金池。什麼是BitgetLaunchpool? BitgetLaunchpool是一個加密貨幣平台,可以透過使用者友善的條款和條件來質押和賺取代幣。透過在Launchpool中投入BGB或其他代幣,用戶有機會獲得免費空投、收益和參與豐厚的獎金池。質押資產的收益在T+1小時內計算,獎勵按

程式設計是乾啥的,學了有什麼用 程式設計是乾啥的,學了有什麼用 Apr 28, 2024 pm 01:34 PM

1、程式設計可用於開發各種軟體和應用程序,包括網站、手機應用程式、遊戲和數據分析工具等。它的應用領域非常廣泛,幾乎涵蓋了所有行業,包括科學研究、醫療保健、金融、教育、娛樂等。 2.學習程式設計可以幫助我們提升問題解決能力和邏輯思考能力。在程式設計過程中,我們需要分析和理解問題,找出解決方案,並將其轉換為程式碼。這種思維方式能夠培養我們的分析和抽象能力,提升我們解決實際問題的能力。

使用 Python 解決問題:作為初學者,解鎖強大的解決方案 使用 Python 解決問題:作為初學者,解鎖強大的解決方案 Oct 11, 2024 pm 08:58 PM

Python 讓初學者能夠解決問題。

C++ 程式設計謎題片段:激發思維,提升程式設計水平 C++ 程式設計謎題片段:激發思維,提升程式設計水平 Jun 01, 2024 pm 10:26 PM

C++程式設計謎題涵蓋斐波那契數列、階乘、漢明距離、陣列最大值和最小值等演算法和資料結構概念,透過解決這些謎題,可以鞏固C++知識,提升演算法理解和程式設計技巧。

把整個地球裝進神經網絡,北航團隊推出全球遙感影像生成模型 把整個地球裝進神經網絡,北航團隊推出全球遙感影像生成模型 Jun 09, 2024 pm 09:56 PM

北航的研究團隊,用擴散模型「復刻」了一個地球?在全球的任何位置,模型都能產生多種解析度的遙感影像,創造出豐富多樣的「平行場景」。而且地形、氣候、植被等複雜的地理特徵,也都考慮到了。受GoogleEarth啟發,北航的研究團隊從俯拍視角出發,將整顆地球的衛星遙感影像「裝進」了深度神經網路。基於這樣的網絡,團隊建構了覆蓋全球的俯視視角視覺生成模型MetaEarth。 MetaEarth擁有6億參數,可實現多種解析度、無界且覆蓋全球任意地理位置的遙感影像生成。覆蓋全球的遙感影像生成模型相比於先前的研

釋放你內心的程式設計師:C 絕對初學者 釋放你內心的程式設計師:C 絕對初學者 Oct 11, 2024 pm 03:50 PM

C語言是初學者學習程式設計的理想選擇,其優點包括效率、多功能性和可移植性。學習C語言需要:安裝C編譯器(如MinGW或Cygwin)了解變數、資料型別、條件語句和迴圈語句編寫包含主函數和printf()函數的第一個程式透過實戰案例(如計算平均數)練習C語言知識

See all articles