base64图片转换为图片并保存

Base64是一种用64个字符来表示任意二进制数据的方法。

Base64的事理很大略,首先,准备一个包含64个字符的数组:

php保存base64图片在PHP里应用ImageMagick生成base64图片 Python

['A', 'B', 'C', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/']

然后,对二进制数据进行处理,每3个字节一组,一共是3x8=24bit,划为4组,每组恰好6个bit

如果要编码的二进制数据不是3的倍数,末了会剩下1个或2个字节怎么办?Base64用x00字节在末端补足后,再在编码的末端加上1个或2个=号,表示补了多少字节,解码的时候,会自动去掉。
利用jpg图片体积要比png小,利用PHP的Imagick类进行图像的操作。

Imagick详细操作:

(1).创建一个底图,宽750px,高1046px,白色背景,格式为jpg的图片// 初始化一个画板

$img =new Imagick(); $img->newImage(750,1046,'white','jpg');

(2).在底图上添加需求图片,条件是我们已经知道了须要合并的图片链接地址

$item_img='https://localhost/bao/uploaded/i1/1750208593/TB1rgM3hhtnkeRjSZSgXXXAuXXa_!!0-item_pic.jpg'

第一步:实例化图片

$imgtwo = new Imagick($item_img);

第二步:设置添加图片的大小

$imgtwo->resizeImage(750,764,Imagick::FILTER_LANCZOS,1);

关于resizeImage参数解释

bool Imagick::resizeImage ( int $columns , int $rows , int $filter , float $blur [, bool $bestfit = false ] )

参数:

● columns 图片的宽度

● rows 图片高度

● filter 过滤器,用于过滤图片,有高斯filte根据情形而定

● blur blur=1 为虚化, blur =-1 为锐化

第三步:与底图合并

$img->compositeImage($imgtwo,$imgtwo->getImageCompose(),0,0);

利用compositeImage();

bool Imagick::compositeImage ( Imagick $composite_object , int $composite , int $x , int $y [, int $channel = Imagick::CHANNEL_ALL ] )

参数:

● composite_object :用于合并的图片的Imagick工具

● composite:合并操作,定义操作常量。
详细请查看 合并操作常量列表

● x:相对图像顶点左上位置(0,0)的横坐标

● y:相对图像顶点左上位置(0,0)的纵坐标

● channel:通过传入一个通道常量,来开启通道模式。
为了支持多个通道,可以通过二进制运算的操作来合并多个通道常量。

到这里就可以得到一个合并的图片了

1、加一个header信息,可以直接在网页上查看图片

header(\"大众Content-Type: img/png\"大众);

echo $img;

2、可以把图片在指定目录中天生,在指定目录下天生为img.png

$file=\"大众./img.png\"大众;

$img->writeImage($file);

我这里是这样处理:

header ( 'Content-type: ' . strtolower ($img->getImageFormat ()) );

$type = strtolower($img->getImageFormat());

$dest_img='/data/tmp/' . md5(microtime(true)).'.'.$type; //要天生的图片的路径,随机天生图片名称

(3).图片上拼接笔墨。
写入笔墨以添加店铺笔墨为例,逐步完成笔墨的写入。

详细解读:

1、实例化ImagickDraw类:

$drawQr = new ImagickDraw();

2、设置字体颜色

$drawQr -> setFillColor(new ImagickPixel('#999999'));

3、设置字体大小

$drawQr -> setFontSize('24');

4、设置字体格式

$drawQr -> setFont('../../conf/Microsoftyahei.ttf');

5、设置字体方向

$draw->setTextAlignment(Imagick::ALIGN_RIGHT);

ps: Imagick::ALIGN_RIGHT 朝右边 Imagick::ALIGN_LEFT 左边 Imagick::ALIGN_CENTER 中间

6、设置字体编码

$drawQr -> setTextEncoding(\"大众utf-8\"大众);

7、画出笔墨

$drawQr -> annotation(114,990,$shop_title);

8、在底图上写入字体

$img -> drawImage($drawQr);

(4).图片base64导出。
终极得到的图片我们组要以base64的格式通报给前端,进行以下操作,把我们末了拼接的到的图片base64转换输出。

$base64_image便是base64格式的图片。