$draw = new \ImagickDraw();
$imagick = new \Imagick();
$imagick->newImage($width, $height, new \ImagickPixel('none'));
$draw->setFillColor($color);
$draw->setFont($font_file);
$draw->setFontSize($size);
$draw->setTextEncoding('UTF-8');
$stringArr = $this->mbStringToArray($text);
$textHeight = 0;
$textWidth = 0;
$charCount = count($stringArr);
$texts = [];
foreach ($stringArr as $char) {
$metrics = $imagick->queryFontMetrics($draw, $char, true);
$charHeight = $metrics['textHeight'];
$charWidth = $metrics['textWidth'];
$textHeight += $charHeight;
$textWidth += $charWidth;
$texts[] = ['char' => $char, 'height' => $charHeight, 'width' => $charWidth];
}
if ($direction == 2) {
if ($charCount > 1) {
$textHeight += ($charCount - 1) * $space;
}
$draw->setTextAlignment(\Imagick::ALIGN_CENTER);
$x = $size / 2;
if ($textHeight > $height) {
$offset = 0;
} else {
$offset = ($height - $textHeight) / 2;
}
$y = $offset;
foreach ($texts as $c) {
$y += $c['height'];
$draw->annotation($x, $y, $c['char']);
$y += $space;
}
} else {
if ($charCount > 1) {
$textWidth += ($charCount - 1) * $space;
}
$metrics = $imagick->queryFontMetrics($draw, $text, false);
$y = $metrics['ascender'];
$draw->setTextAlignment(\Imagick::ALIGN_LEFT);
if ($align == \Imagick::ALIGN_CENTER) {
if ($textWidth > $width) {
$x = 0;
} else {
$x = ($width - $textWidth) / 2;
}
} elseif ($align == \Imagick::ALIGN_RIGHT) {
$x = $width - $textWidth;
} else {
$x = 0;
}
foreach ($texts as $c) {
$draw->annotation($x, $y, $c['char']);
$x += $c['width'] + $space;
}
}
$imagick->setImageFormat("png");
$imagick->drawImage($draw);
header("Content-Type: image/png");
echo $imagick->getImageBlob();
月度归档:2017年11月
Vagrant box国内镜像及本地安装教程
Vagrant是非常好的本地开发环境搭建工具。
通常使用官方下载都会比较慢,而国内box下载地址较少,所以我特别下载了几个传到百度网盘。
(目前官方已支持CDN加速,可能不太需要了)
国内镜像下载
- CentOS 6/7/8 修改链接中的版本号可以下载不同版本 http://mirrors.ustc.edu.cn/centos-cloud/centos/6/vagrant/x86_64/images/
- Ubuntu Server 14.04 https://mirrors.ustc.edu.cn/ubuntu-cloud-images/server/vagrant/trusty/current/
- Ubuntu Server 16.04 https://mirrors.ustc.edu.cn/ubuntu-cloud-images/server/xenial/current/
- Ubuntu Server 18.04 https://mirrors.ustc.edu.cn/ubuntu-cloud-images/server/bionic/current/
- Ubuntu Server 20.04 http://mirrors.ustc.edu.cn/ubuntu-cloud-images/focal/current/
官方直接下载
- Debian 8 https://app.vagrantup.com/debian/boxes/jessie64/versions/8.11.1/providers/virtualbox.box
- Debian 9 https://app.vagrantup.com/debian/boxes/stretch64/versions/9.12.0/providers/virtualbox.box
- Debian 10 https://app.vagrantup.com/debian/boxes/buster64/versions/10.4.0/providers/virtualbox.box
- laravel/homestead https://app.vagrantup.com/laravel/boxes/homestead/versions/9.5.1/providers/virtualbox.box
官方已经采用cdn加速
vagrant box add ubuntu/trusty64
vagrant box add ubuntu/trusty32
vagrant box add generic/ubuntu1804
vagrant box add generic/ubuntu1604
vagrant box add generic/centos7
vagrant box add generic/centos8
vagrant box add generic/centos8
vagrant box add generic/debian8
vagrant box add generic/debian10
下载后的使用方法
添加vagrant box到box list
vagrant box add centos7 CentOS-7.box
初始化一个虚拟机使用刚才添加的vagrant box
vagrant init centos7
启动vagrant box虚拟机
vagrant up
PHP生成一个透明背景的PNG图像(GD+Imagick)
使用GD
header('Content-Type:image/png');
$width = 300;
$height = 300;
$color = 'ff0000';
$font_file = 'size.ttf';
$im = imagecreatetruecolor($width, $height);
$bg = imagecolorallocatealpha($im, 0, 0, 0, 127);
imagefill($im, 0, 0, $bg);
imagefttext($im, 33, 0, 150, 150, $color, $font_file, 'test');
imagesavealpha($im, true);
imagepng($im);
imagedestroy($im);
使用imagick
$draw = new \ImagickDraw();
$imagick = new \Imagick();
$imagick->newImage($width, $height, new \ImagickPixel('none'));
$draw->setFillColor($color);
$draw->setFont($font_file);
$draw->setFontSize($size);
$draw->setTextEncoding('UTF-8');
$draw->annotation($x, $y, $text);
header("Content-Type: image/png");
echo $imagick->getImageBlob();
使用Vagrant+CentOS 7搭建PHP7开发环境(含centos7.box直接下载地址)
Vagrant是一款基于命令行的虚拟机管理软件,可以用来快速部署统一的开发环境。
下载Vagrant
https://www.vagrantup.com/downloads.html
下载CentOS 7 Box
官方box下载地址
https://app.vagrantup.com/boxes/search
第三方box下载地址
使用原生下载
https://app.vagrantup.com/centos/boxes/7
vagrant init centos/7
vagrant up
vagrant 配置
config.vm.network "public_network", ip: "192.168.31.245"
config.vm.synced_folder "d:/data", "/data"
config.vm.synced_folder "d:/phpcode", "/phpcode"
通过下载工具下载centos 7 box
官方box文件下载地址:http://cloud.centos.org/centos/7/vagrant/x86_64/images/
百度网盘box文件下载地址:
- CentOS 7: https://pan.baidu.com/s/1kVlAz59
添加并运行box
vagrant box add centos7 CentOS-7.box
vagrant init centos7
vagrant up
基础系统安装
基本系统安装
vagrant ssh
sudo passwd vagrant
sudo yum groupinstall "Development tools" -y
sudo yum install vim gcc kernel-devel kenel-devel-`uname -r`
禁止selinux
sudo setenforce 0
sudo vi /etc/selinux/config
SELINUX=disabled
停止防火墙
sudo systemctl disable firewalld
sudo systemctl stop firewalld
更新系统
sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
sudo yum install yum-utils
sudo yum-config-manager --enable remi-php72
sudo yum update
sudo yum install php-gd php-pdo php-opcache php-fpm php-pecl-redis php-pecl-mysql php-pecl-mysql php-mbstring php-intl php-cli php-xml
sudo yum install nginx -y
sudo yum install mariadb mariadb-server -y
修改nginx配置
mkdir /data/log/nginx /data/run/nginx -p
sudo service nginx stop
sudo vim /etc/nginx/nginx.conf
nginx.conf配置修改如下:
user vagrant;
error_log /data/log/nginx/error.log;
pid /data/run/nginx/nginx.pid;
access_log /data/log/nginx/access.log main;
include /data/phpcode/projectname/vagrant/nginx/app.conf;
测试nginx配置
sudo nginx -t
修改nginx service配置:
sudo vim /usr/lib/systemd/system/nginx.service
nginx.service修改内容如下:
[Service]
PIDFile=/data/run/nginx/nginx.pid
重新加载service
sudo systemctl daemon-reload
sudo systemctl start nginx
修改PHP配置
mkdir /data/run/php-fpm/session /data/run/php-fpm/wsdlcache /data/run/php-fpm/opcache /data/log/php-fpm/ -p
sudo service php-fpm stop
sudo vim /etc/php-fpm.d/www.conf
配置内容
user = vagrant
group = vagrant
php_value[session.save_path] = /data/run/php-fpm/session
php_value[soap.wsdl_cache_dir] = /data/run/php-fpm/wsdlcache
php_value[opcache.file_cache] = /data/run/php-fpm/opcache
php_admin_value[error_log] = /data/log/php-fpm/www-error.log
slowlog = /data/log/php-fpm/www-slow.log
request_slowlog_timeout = 1
重启
sudo service php-fpm stop
配置Mysql
mkdir /data/mysql /data/run/mariadb /data/log/mariadb -p
sudo service mariadb stop
sudo vim /etc/my.cnf
mysqld配置
[mysqld]
datadir=/data/mysql
socket=/usr/lib/mysql/mysql.sock
[mysqld_safe]
log-error=/data/log/mariadb/mariadb.log
pid-file=/data/run/mariadb/mariadb.pid
mysql client 配置
[client]
初始化数据库
sudo /usr/libexec/mariadb-prepare-db-dir mariadb.service
修改systemd配置
sudo vim /usr/lib/systemd/system/mariadb.service
配置内容
User=vagrant
Group=vagrant
重载systemd
sudo systemctl daemon-reload
sudo systemctl start mariadb
修改mysql账号密码
'/usr/bin/mysqladmin' -u root password 'new-password'
'/usr/bin/mysqladmin' -u root -h localhost.localdomain password 'new-password'
# Alternatively you can run:
'/usr/bin/mysql_secure_installation'
配置composer
下载安装文件
php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
安装
php composer-setup.php
删除安装文件
php -r "unlink('composer-setup.php');"
设置全局路径(windows请按参考文档设置)
sudo mv composer.phar /usr/bin/composer
配置使用国内镜像
composer config -g repo.packagist composer https://packagist.phpcomposer.com
HTML中的全角、半角空格
HTML提供了5种空格实体(space entity),它们拥有不同的宽度,非断行空格( )是常规空格的宽度,可运行于所有主流浏览器。其他几种空格( )在不同浏览器中宽度各异。
它叫不换行空格,全称No-Break Space,它是最常见和我们使用最多的空格,大多数的人可能只接触了 ,它是按下space键产生的空格。在HTML中,如果你用空格键产生此空格,空格是不会累加的(只算1个)。要使用html实体表示才可累加, 该空格占据宽度受字体影响明显而强烈。
 
它叫“半角空格”,全称是En Space,en是字体排印学的计量单位,为em宽度的一半。根据定义,它等同于字体度的一半(如16px字体中就是8px)。名义上是小写字母n的宽度。此空格传承空格家族一贯的特性:透明的,此空格有个相当稳健的特性, 就是其占据的宽度正好是1/2个中文宽度,而且基本上不受字体影响。
 
它叫“全角空格”,全称是Em Space,em是字体排印学的计量单位,相当于当前指定的点数。例如,1 em在16px的字体中就是16px。此空格也传承空格家族一贯的特性:透明的,此空格也有个相当稳健的特性, 就是其占据的宽度正好是1个中文宽度,而且基本上不受字体影响。
 
它叫窄空格,全称是Thin Space。我们不妨称之为“瘦弱空格”,就是该空格长得比较瘦弱,身体单薄,占据的宽度比较小。它是em之六分之一宽。
‌
它叫零宽不连字,全称是Zero Width Non Joiner,简称“ZWNJ”,是一个不打印字符,放在电子文本的两个字符之间,抑制本来会发生的连字,而是以这两个字符原本的字形来绘制。Unicode中的零宽不连字字符映射为“”(zero width non-joiner,U+200C),HTML字符值引用为:
‍
它叫零宽连字,全称是Zero Width Joiner,简称“ZWJ”,是一个不打印字符,放在某些需要复杂排版语言(如阿拉伯语、印地语)的两个字符之间,使得这两个本不会发生连字的字符产生了连字效果。零宽连字符的Unicode码位是U+200D (HTML: )。
此外,浏览器还会把以下字符当作空白进行解析:空格( )、制表位( )、换行( )和回车( )还有( )等等。