首页 > 其他分享 >hyperf 生成二维码并且转为CMYK色彩通道的图片

hyperf 生成二维码并且转为CMYK色彩通道的图片

时间:2024-06-23 13:59:55浏览次数:22  
标签:二维码 value qrImage CMYK hyperf new bgImage

注意:CMYK色彩通道的图片格式需要为 JPEG 或 TIFF ,png是不支持CMYK的,不然转换的话会转换会srgb或Gray

使用前先安装imagick拓展
1 {
2     "require": {
3         "ext-imagick": "*"
4     }
5 }

 

 
 1 public function createQrcode($data): void
 2     {
 3         // 设置文本字体和大小
 4         $fontFile = 'public/RobotoSlab-VariableFont_wght.ttf'; // 请提供一个实际的字体文件路径
 5         $fontSize = 20;
 6         // 创建 ImagickDraw 对象
 7         $draw = new ImagickDraw();
 8         $draw->setFont($fontFile);
 9         $draw->setFontSize($fontSize);
10 
11         foreach ($data as $index => $value) {
12             // 生成二维码
13             $qrCode = Builder::create()
14                 ->writer(new PngWriter())
15                 ->writerOptions([])
16                 ->data($value['code'])
17                 ->encoding(new Encoding('UTF-8'))
18                 ->size(260)
19                 ->margin(10)
20                 ->validateResult(false)
21                 ->build();
22 
23             // 创建保存二维码的目录
24             $batchDir = "public/qrcode/batch_{$value['batch_id']}";
25             if (!is_dir($batchDir)) {
26                 mkdir($batchDir, 0755, true); // 递归创建目录
27             }
28 
29             // 创建一个空白的 Imagick 对象作为背景
30             $bgImage = new Imagick();
31             $bgImage->newImage(400, 400, new ImagickPixel('white'));
32 
33             // 从二维码数据中创建一个新的 Imagick 对象
34             $qrImage = new Imagick();
35             $qrImage->readImageBlob($qrCode->getString());
36 
37             // 计算二维码放置位置使其居中
38             $qrWidth = $qrImage->getImageWidth();
39             $qrHeight = $qrImage->getImageHeight();
40             $qrX = (400 - $qrWidth) / 2;
41             $qrY = (400 - $qrHeight) / 2 - 20; // 稍微偏上
42 
43             // 将二维码图像拷贝到背景图上
44             $bgImage->compositeImage($qrImage, Imagick::COMPOSITE_OVER, $qrX, $qrY);
45 
46             // 释放二维码图像资源
47             $qrImage->clear();
48             $qrImage->destroy();
49 
50             // 获取文本框的尺寸
51             $metrics = $bgImage->queryFontMetrics($draw, $value['code']);
52             $textWidth = $metrics['textWidth'];
53             $textX = (400 - $textWidth) / 2;
54             $textY = $qrY + $qrHeight + 40;
55 
56             // 添加文本到背景图上
57             $bgImage->annotateImage($draw, $textX, $textY, 0, $value['code']);
58 
59             // 将图像转换为 CMYK 色彩模式
60             $bgImage->transformImageColorspace(Imagick::COLORSPACE_CMYK);
61 
62             // 保存最终图像到文件
63             $file = "{$batchDir}/{$value['code']}.jpeg"; // 使用索引作为文件名
64             $bgImage->setImageFormat('jpeg');
65             $bgImage->writeImage($file);
66 
67             // 释放背景图像资源
68             $bgImage->clear();
69             $bgImage->destroy();
70 
71             echo "生成二维码成功:{$file}<br>";
72         }
73 
74         // 释放 ImagickDraw 对象
75         $draw->destroy();
76     }

 字体文件:https://fonts.google.com/  我从这边谷歌字体下载的

标签:二维码,value,qrImage,CMYK,hyperf,new,bgImage
From: https://www.cnblogs.com/sdfgdrg/p/18263387

相关文章

  • java微信公众平台----带参数二维码生成和扫描事件
    功能是在详情页面点击按钮,生成二维码。打开微信扫码,扫码之后手机跳转到公众号并发送一条模板消息。点击模板消息,跳转到H5的详情页面。参考推荐:https://blog.csdn.net/weixin_42720002/category_8977300.html官方文档:https://developers.weixin.qq.com/doc/offiaccount/Account_Ma......
  • Laravel中的二维码扩展包
    Laravel中有几个不错的二维码打印扩展包可以选择使用,其中比较常见的有:Simplesoftwareio/simple-qrcode:这是一个简单易用的二维码生成工具,支持多种格式输出,包括PNG、SVG等。文档地址:https://github.com/SimpleSoftwareIO/simple-qrcodeMilon/barcode:这个扩展包......
  • jsQR库识别二维码
    <html><head><metacharset="utf-8"/><title>jsQR库识别二维码</title><scriptsrc="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script><scriptsrc=&q......
  • 二维码分班查询系统你还不会用?
    分班查询系统,已经成为许多学校管理分班流程的得力助手。当新学期伊始,学校需要进行分班,而传统的手工分班方式不仅耗时,还容易出错。这时,一个智能的分班查询系统就显得尤为重要。作为老师,您可能已经意识到,分班不仅仅是简单的名单分配,而它关系到学生的学习环境和未来发展。易......
  • 二维码的容量大小
    突然想看看二维码最多能存储多少数据,正好有个二维码生成插件测试了下中文是426个(无回车换行符)英文是1270个但是这么多字符的情况识别就比较困难了,对清晰度要求高,最好是无压缩网上查的是500多个汉字,参考下......
  • 【二维码】
    二维码(QuickResponseCode,简称QRCode)是一种能够存储大量信息的编码方式,广泛应用于各种场合,如移动支付、信息传递等。在程序编写中,生成二维码通常需要使用专门的库或框架。以下是使用Python语言和qrcode库生成二维码的一个简单示例:首先,确保你的Python环境已经安装了qrcod......
  • 轻松便捷,文件分享新选择,易易二维码
    在数字化快速发展的今天,文件分享与传输已经成为我们日常生活和工作中不可或缺的一部分。然而,随着文件体积的增大和数量的增多,如何高效、安全、便捷地分享文件成为了许多人头疼的问题。今天,我要向大家推荐一款革命性的在线工具——易易二维码,它将彻底改变你的文件分享体验。一、易......
  • jQuery生成微信二维码名片扫码添加联系人代码
    jQuery生成微信二维码名片扫码添加联系人代码,可以设置联系人姓名,公司,职务,地址,手机,邮箱,网址,备注信息生成二维码。 js代码 <scriptsrc="js/jquery.min.js"></script><scriptsrc="js/qrcode.js"></script><script>varname,company,title,address,mobile,e......
  • android生成二维码实例
     android生成二维码实例生成二维码工具类packagecom.catanddog.utils;importandroid.graphics.Bitmap;importandroid.graphics.Color;importandroid.text.TextUtils;importandroidx.annotation.ColorInt;importandroidx.annotation.Nullable;importcom.goog......
  • excel中加水印以及二维码
    1.如何给excel添加二维码其实二维码就是一张图片,把生成的二维码作为图片返回给excel对应的栏位就可以达到目的,代码如下:点击查看代码publicBitmapGetBitmap(stringcode,ExcelPackagepackage){varsheet=package.Workbook.Worksheets[0];//创建QR码生成器......