IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> PHP 关于thinkphp5.0使用Imagick -> 正文阅读

[PHP知识库]PHP 关于thinkphp5.0使用Imagick

????????PHP输出画布已经是非常常见的功能,通常使用的都是imagecreatetruecolor()来创建画布,但是有和重要的问题无法修改“分辨率” 。

????????在网页中显示72dpi就足够了,但是打印机使用多数是300dpi,所以建议使用imagick代替imagecreatetruecolor()。使用的基本逻辑差不多,只不过imagick是面向对象式的编程,imagecreatetruecolor是面向过程的开发。

????????优势就是imagick可以修改图片的dpi。下面是我输画布的一些代码参考一下:

(1)首先安装imagick的插件给PHP环境(自行查找资料,网上有现成的资料)

(2)thinkphp5.0使用imagecreatetruecolor()输出图像的方式

public function three_page($id)
  {
    header('content-type:image/jpeg');
    $user = $this->user_info();
    //查询用户信息和用户的报相关信息
    $data = Graduate::get($id);
    $major = Course::where("name",$data['major'])->field("id")->find();
    $majorCourse = Majorcourse::where("type",$major['id'])->select();
    //设置图片尺寸
    $width =1587;
    $height =2245;
    $img =imagecreatetruecolor($width,$height); //创建一个真色彩画布
    $color = imagecolorallocate($img,255,255,255); //创建画布颜色
    $textcolor = imagecolorallocate($img,0,0,0); //创建文本颜色
    imagefill($img,0,0,$color);  //填充颜色
    //循环输出用户信息到画布 
    for($i=0;$i<count($majorCourse);$i++) {
      $l = mb_strlen($majorCourse[$i]['name'],"utf-8");
      $x = 179+((216-($l*24))/2);
      $y = 290+$i*43.7-43.7;
//    imagestring($img,57,434,1225,$apply_node,$textcolor);
      imagettftext($img, 22, 0, 92, $y, $textcolor, ROOT_PATH . "/public/static/admin/fonts/IRNazaninBold.otf", $i+1);
      imagettftext($img, 22, 0, $x, $y, $textcolor, ROOT_PATH . "/public/static/admin/fonts/simsun.ttc", $majorCourse[$i]['name']);
      imagettftext($img, 22, 0, 491, $y, $textcolor, ROOT_PATH . "/public/static/admin/fonts/simsun.ttc", $majorCourse[$i]['course_time'] != 0 ?  $majorCourse[$i]['course_time'] : "");
      imagettftext($img, 22, 0, 639, $y, $textcolor, ROOT_PATH . "/public/static/admin/fonts/simsun.ttc", $majorCourse[$i]['name'] == "毕业设计" ? "优" : rand(75,95));
    }

    imagejpeg($img,null,100); //输出画布
    imagedestroy($img); //销毁画布
    exit();
  }

(3)在Thinkphp5.0中使用imagick完成画布的输出。(有注意点哦,仔细阅读)

  function handleImg(){
      header("content-type:image/jpeg"); //设置头部信息
      $user = $this->user_info(); //判断是否登录 返回用户信息
      //查询用户信息和用户的报名信息
      $data = Graduate::get(4);
      $major = Course::where("name",$data['major'])->field("id")->find();
      $majorCourse = Majorcourse::where("type",$major['id'])->select();
     $color_transparent = new \ImagickPixel('#ffffff');
     //设置画布的尺寸
     $width =1587;
     $height =2245;
     $image = new \Imagick(); //创建画布
     $image->newImage($width,$height,$color_transparent,'jpg');//设置画布的信息以及画布的格式
     $style = ["font_size"=>150,"fill_color"=>"#000000","font"=>ROOT_PATH."/public/static/admin/fonts/IRNazaninBold.otf"]; //设置文字的属性
     $style2 = ["font_size"=>130,"fill_color"=>"#000000","font"=>ROOT_PATH."/public/static/admin/fonts/simsun.ttc"]; //设置第二个文字的属性
     $image->resampleImage(300,300,\Imagick::RESOLUTION_PIXELSPERINCH,0); //设置画布的dpi为300
     
   //循环的将数据库查询到的信息输出到画布上
     for($i=0;$i<count($majorCourse);$i++) {
          $str = $majorCourse[$i]['name'];
          $l = mb_strlen($str, "utf-8");
          $x = 800 + (1100-$l*130)/2;
          $y = 1130 + $i * 192;
          $this->add_text($image, $i+1, 410, $y, 1, $style); //序号
          $this->add_text($image, $str, $x ,$y, 1, $style2); //课程名称 900
          $this->add_text($image, $majorCourse[$i]['course_time'] != 0 ?  $majorCourse[$i]['course_time'] : "", 2200 ,$y, 1, $style); //课时
          $this->add_text($image, $majorCourse[$i]['name'] == "毕业设计" ? "优" : rand(75,95), 2840 ,$y, 1, $style2); //成绩
     }
     echo $image; //输出画布信息,当然最好是换成保存图片。
     $image->destroy(); //销毁画布
     exit;
  }

  //设置文字
  public function add_text(&$imagick, $text, $x = 0, $y = 0, $angle = 0, $style = array()) {
    $draw = new \ImagickDraw ();
    if (isset ( $style ['font'] ))
      $draw->setFont ( $style ['font'] );
    if (isset ( $style ['font_size'] ))
      $draw->setFontSize ( $style ['font_size'] );
    if (isset ( $style ['fill_color'] ))
      $draw->setFillColor ( $style ['fill_color'] );
    if (isset ( $style ['under_color'] ))
      $draw->setTextUnderColor ( $style ['under_color'] );
    if (isset ( $style ['font_family'] ))
      $draw->setfontfamily( $style ['font_family'] );
    if (isset ( $style ['font'] ))
      $draw->setfont($style ['font'] );
      $draw->settextencoding('UTF-8');
    if (strtolower ($imagick->getImageFormat ()) == 'gif') {
      foreach ( $imagick as $frame ) {
        $frame->annotateImage ( $draw, $x, $y, $angle, $text );
      }
    } else {
      $imagick->annotateImage ( $draw, $x, $y, $angle, $text );
    }
  }

注意:(1)不能直接new Imagick需要再前面加一个 “\” ,这样thinkphp才不报错

? ? ? ? ? ?(2)如果是直接输出到浏览器上,然后使用浏览器保存图片大家会发下图片的dpi是96dpi,所以这里建议直接保存图片。

?

?

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-08-21 15:07:20  更:2021-08-21 15:09:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/13 7:13:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码