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根据输入的文字自动生成图片并把文字在图片上展示出来 -> 正文阅读

[PHP知识库]使用php根据输入的文字自动生成图片并把文字在图片上展示出来

背景:

为了减少服务器内图片的数量,采用了同事介绍的这种图片展示方式,用着还不错

需要准备的东西:

字体库(.ttf的文件)存放在font文件夹下

样式图片(.jpg是背景图规格大小是800*500,.png是用于放输出文字的地方600*400)存放在image文件夹下

php版本(5.6X左右就好,不建议到7.X因为之前用过7.3的版本出问题了),并且php开启gd库.

代码很简单,就一个文件就好 url.php(这个文件是要与伪静态中的配置对应起来)

<?php
$numrand=rand(1,2);

$bgimg ='./image/'.$numrand.'.jpg';
$bg_info = getimagesize($bgimg);
//获取图片的后缀
$bg_type = image_type_to_extension($bg_info[2], false);
//拼接图片资源句柄函数
$func = 'imagecreatefrom' . $bg_type;
//创建图片资源句柄
$bg_image = $func($bgimg);
//图1处理
$numrand2=rand(1,2);
$tu1 ='./image/'.$numrand2.'.png';
$tu1_info = getimagesize($tu1);
$tu1_type = image_type_to_extension($tu1_info[2], false);
//创建图片资源句柄
$tu1_func = 'imagecreatefrom' . $tu1_type;
$tu1_image = $tu1_func($tu1);
//合并背景图+图1
imagecopy($bg_image, $tu1_image, 100, 50, 0, 0, 600, 400);  //图1 200距左边距 50距顶边距 301 299图1大小  背景图 0 0
//图2处理  二维码
$tu2 = './image/'.$numrand2.'.png';
$tu2_mark = getimagesize($tu2);
$tu2_type = image_type_to_extension($tu2_mark[2], false);
//创建图片资源句柄
$tu2_func = 'imagecreatefrom' . $tu2_type;
$tu2_image = $tu2_func($tu2);
//合并背景图+二维码
imagecopy($bg_image, $tu2_image, 583, 1193, 0, 0, 258, 261);
//文字
$get=$_GET['title'];

$len = mb_strlen($get,'utf-8');

$gettxtone=mb_substr($get,0,12,'utf-8');
$gettxttwo=mb_substr($get,12,13,'utf-8');
$gettxtsan=mb_substr($get,25,13,'utf-8');

$text1 = preg_split('/(?<!^)(?!$)/u', $gettxtone);
$text2 = preg_split('/(?<!^)(?!$)/u', $gettxttwo);
$text3 = preg_split('/(?<!^)(?!$)/u', $gettxtsan);

//水印开关
$waterturn=1; //1是水印开,否则是关
if($waterturn==1){
//添加水印
$waterfont="捷安智能";
$waterfont = preg_split('/(?<!^)(?!$)/u', $waterfont);
//水印的x轴
$waterx=620;
//水印的y轴
$watery=480;
//水印结束
}

$color = imagecolorallocate($bg_image, 255,255,255);//字体颜色
//随机字体
$fontrand=rand(1,8);
$font = "./font/".$fontrand.".ttf"; //字体文件
$font_lposition = [110, 60]; //距左边距
$font_tposition = [220, 120]; //距上边距
$height=500;
$width=800;
$height =$height +  $h*$size;

//这里根据是否有第三行文字,设置第一行的高度
$num_size = 2;
if(count($text3) > 1){
$num_size = 3;
}


$size = 30;//字体大小
$x=130;//第一行定位
$y=($height-imagefontheight($size))/$num_size;
 $x2=110;//第二行定位
 $y2=$y+60;

 $x3=110;//第二行定位
 $y3=$y2+60;

  foreach ($text1 as $k => $v) {
            #imagettftext(参数A:背景图路径,参数B:字体大小,参数C:文字角度0标识从左到右读的文本,参数D:首个文字在背景图上的横坐标,参数E:首个文字在背景图上的纵坐标,参数F:文字的颜色值,参数G:字体库路径,参数H:需要写在图上的文字,)
			imagettftext($bg_image, $size, 0, $x, $y, $color, $font, $v);//在背景图上循环添加文字
            $x = $x + 45;//增加横坐标来做到间距的效果,没有这个参数打印出来的字会重叠在一起!
 } 
   foreach ($text2 as $k => $v) {
	         
            #imagettftext(参数A:背景图路径,参数B:字体大小,参数C:文字角度0标识从左到右读的文本,参数D:首个文字在背景图上的横坐标,参数E:首个文字在背景图上的纵坐标,参数F:文字的颜色值,参数G:字体库路径,参数H:需要写在图上的文字,)
			imagettftext($bg_image, $size, 0, $x2, $y2, $color, $font, $v);//在背景图上循环添加文字
            $x2 = $x2+ 45;//增加横坐标来做到间距的效果,没有这个参数打印出来的字会重叠在一起!
 } 
 foreach ($text3 as $k => $v) {
	         
            #imagettftext(参数A:背景图路径,参数B:字体大小,参数C:文字角度0标识从左到右读的文本,参数D:首个文字在背景图上的横坐标,参数E:首个文字在背景图上的纵坐标,参数F:文字的颜色值,参数G:字体库路径,参数H:需要写在图上的文字,)
			imagettftext($bg_image, $size, 0, $x3, $y3, $color, $font, $v);//在背景图上循环添加文字
            $x3 = $x3+ 45;//增加横坐标来做到间距的效果,没有这个参数打印出来的字会重叠在一起!
 } 
 //判断是否存在水印
if($waterfont){
foreach ($waterfont as $k => $v) {        
            #imagettftext(参数A:背景图路径,参数B:字体大小,参数C:文字角度0标识从左到右读的文本,参数D:首个文字在背景图上的横坐标,参数E:首个文字在背景图上的纵坐标,参数F:文字的颜色值,参数G:字体库路径,参数H:需要写在图上的文字,)
			imagettftext($bg_image, $size, 0, $waterx, $watery, $color, $font, $v);//在背景图上循环添加文字
            $waterx =$waterx+ 45;//增加横坐标来做到间距的效果,没有这个参数打印出来的字会重叠在一起!
 } 
}
//保存图片
 header("Content-type:image/png");
 imagepng($bg_image);
 imagedestroy($bg_image);
//销毁内存
imagedestroy($bg_image);
imagedestroy($tu1_image);
imagedestroy($tu2_image);
//开启缓存
session_start(); 
header("Cache-Control: private, max-age=10800, pre-check=10800");
header("Pragma: private");
header("Expires: " . date(DATE_RFC822,strtotime(" 2 day")));
?>

伪静态配置:


apache的伪静态

RewriteRule  ^(aiimage)/(.*).png$  $1/url.php?title=$2

ngnix的伪静态

location /aiimage {
  rewrite ^/(aiimage)/(.*).png$ /$1/url.php?title=$2;
}
或者:
rewrite ^/(aiimage)/(.*).png$ /$1/url.php?title=$2;

我的是apache的?.htaccess文件

<IfModule mod_rewrite.c>
  Options +FollowSymlinks
  RewriteEngine On
  
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  
  RewriteRule  ^(.*).png$  /url.php?title=$1
</IfModule>

示例代码:_根据上面来的基本上可以不用下载.如果看不明白的可以下载参考一下

https://download.csdn.net/download/u014401637/82455611https://download.csdn.net/download/u014401637/82455611

示例网址:最下方的图片就是这样生成的

非直角剪力墙加固-木模支设加固与新型墙体加固件加固对比-墙体加固件生产厂家剪力墙结构是民用建筑中较常见的结构形式,当采用木模支设时,墙体拐角处的加固是比较困难的,特别是非直角拐角,如45°,120°,135°等,处理不好,浇筑混凝土时极易发生位移、胀模和漏浆等质量缺陷。下面捷安智能分别举例使用传统木方加钢管的方式以及捷安智能新型剪力墙加固件的方式进行加固传统木方加钢管一、制作(以1http://www.mybancai.cn/problem/759.html

?=======================分割线========================

还有就是结合之前的一篇文章就可以在pbootcms中根据文章标题自动生成图片

pbootcms自定义标签开发_替换标题中的特殊符号_u014401637的博客-CSDN博客如题:最新在使用pbootcms进行建站,现有的标签不符合自己的一些业务需求,想着自己做个符合自己的业务的标签,于是参考了一下网上的资料以后便开始着手开发了,整个二开还是比较简单,下面放出来需要修改的文件.前端使用标签的地方我的需求其实是在news.html也就是新闻中文章末尾添加一个自定义图片(根据标题生成一张图片,因为生成图片的方法不能包含特殊符号所以需要把标题中的特殊符号尤其是?去掉)<!-- 新增图片_dcx--><p style="text-align: cehttps://blog.csdn.net/u014401637/article/details/122164903

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 15:48:22  更:2022-03-03 15:49:54 
 
开发: 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年11日历 -2024/11/23 11:59:05-

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