GPT-SoVITS-WebUI一键整合包及使用教程 - 掘金

mikel阅读(272)

来源: GPT-SoVITS-WebUI一键整合包及使用教程 – 掘金

GPT-SoVITS-WebUI

语音技术在人工智能的驱动下,正在以前所未有的速度推进。GPT-SoVITS-WebUI正是这一变革的先驱它利用少量的声音源,可以快速地训练出一个语音合成(Text-to-Speech,简称TTS)模型。

这个强大的Web界面工具不仅提供了零次学习和少量次学习的文本到语音(TTS)功能,还支持跨语言的语音转换,为语音技术的爱好者和开发者打开了一扇新的大门。

功能亮点:

  • 零次TTS: 只需输入一段5秒的语音样本,GPT-SoVITS-WebUI就能立即将其转换为文本,让你体验到即时的语音到文本的转换。
  • 少次TTS: 通过微调模型,只需1分钟的训练数据,就能显著提升语音的相似度和真实感,这对于个性化语音合成尤为关键。
  • 跨语言支持: GPT-SoVITS-WebUI能够处理与训练数据集不同语言的语音,目前支持英语、日语和中文,这大大拓宽了其应用范围。
  • WebUI工具集成: 工具中集成了多种实用功能,如语音伴奏分离、自动训练集分割、中文自动语音识别(ASR)和文本标注,这些工具对于初学者来说尤其友好,可以帮助他们轻松创建训练数据集和GPT/SoVITS模型。

学术Fun已将上述工具制作成一键启动包,点击即可使用,避免大家配置Python环境出现各种问题。下载地址: xueshu.fun/3670/,请在此页面右侧区域点击下载!

注意: 电脑配置需要满足以下条件:

  • 运行Windows 10/11 64位操作系统

安装教程

  1. 下载压缩包 下载地址: xueshu.fun/3670/,请在此页面右侧区域点击下载!
  2. 解压压缩包 解压后的路径最好不要包含中文。解压完成后,如下图所示,双击启动.exe文件运行。

解压文件

解压文件

  1. 启动WebUI 在浏览器中访问http://127.0.0.1:7860/,即可在浏览器中使用GPT-SoVITS-WebUI。

WebUI界面

WebUI界面

使用教程

获取数据集

  1. 声音提取: 选择 “0a-UVR5人声伴奏分离&去混响去延迟工具” 页签。我们需要勾选 “是否开启UVR5-WebUI” 来提取声音,制作干声。

开启UVR5-WebUI

开启UVR5-WebUI

稍等一下,会打开一个新的WebUI界面。

新的WebUI界面

新的WebUI界面

我们将在这个界面内完成提取干声的操作。将准备的音频或者视频文件拖放到左下角的框框内。

拖放音频或视频文件

拖放音频或视频文件

选择处理的模型。如果你的视频声音比较干净,可以选择HP2模型。如果背景声音很嘈杂,可以选择HP3模型。

选择处理模型

选择处理模型

选择输出格式,然后点击 “转换”。

点击转换

点击转换

转换成功后,你可以在整合包output路径下的uvr5输出目录中找到转换结果。

转换结果

转换结果

  1. 语音切分: 关闭 “是否开启UVR5-WebUI”,以释放显存。

关闭UVR5-WebUI

关闭UVR5-WebUI

删除刚刚音频分离路径下的背景声音,并将路径复制到下面的输入框里。

删除背景声音

删除背景声音

选择 “0b-语音切分工具” 页签。

选择语音切分工具

选择语音切分工具

点击 “开始语音切割”。

开始语音切割

开始语音切割

完成后,你可以在\output\slicer_opt路径下看到切割后的所有音频文件。

  1. 语音识别: 选择 “0c-中文批量离线ASR工具” 页签,将刚刚的分类目录路径复制到下面ASR中。

中文批量离线ASR工具

中文批量离线ASR工具

点击 “开启离线批量ASR”。

开启离线批量ASR

开启离线批量ASR

完成后,识别结果会保存在\output\asr_opt目录下。

  1. 开启标注工具: 选择 “0d-语音文本校对标注工具” 页签,把上面ASR生成的list文件的完整路径填写到下面的标注文件路径中。

开启标注工具

开启标注工具

点击 “是否开启打标WebUI”,系统会提示打标工具已开启。稍等一会儿,会弹出新的WebUI窗口,这就是标注工具的WebUI界面。

标注工具WebUI界面

标注工具WebUI界面

在这个界面里面进行文本校对,修改标点符号与停顿一致。如果听不清,有杂音,语速乱的,建议删除。或者回去进行音源调整。

进行文本校对

进行文本校对

删除方式是先勾选,然后点击 “删除”。一定要点 “上一页” 和 “下一页” 查看全部的,以免漏下。校对无误后点击保存,提交文本。

提交文本

提交文本

数据会保存到slicer_opt.list中。至此,我们已经完成了前置获取数据集的工作。

训练模型

  1. 训练集格式化: 点击 “1A-训练集格式化工具”,进入训练集格式化界面。填写训练的模型名称,填写上面数据集的list目录和音频切分的目录。

训练集格式化

训练集格式化

点击下面按钮 “开启一键三连”。

开启一键三连

开启一键三连

结束后,我们会在\logs\YeShu文件下看见23456。

训练完成

训练完成

这里我们得到了后面需要训练的特征缓存文件。

  1. 微调训练: 点击 “1B-微调训练” 页签,进入子模型训练界面。

我们需要开启两个微调子模型的训练,参数默认即可。推荐使用20系以上的N卡,8G以上的显存。如果显存不够,可以降低batch_size的数值。

微调训练

微调训练

点击 “开始SoVITS训练” 和 “开始GPT训练”。

开始SoVITS训练和GPT训练

开始SoVITS训练和GPT训练

VITS训练需要一些时间,请耐心等待。

训练中

训练中

训练中

训练中

训练完成后,微调模型就已经准备好了。

  1. 推理: 点击 “1C-推理” 页签,进入推理界面。

推理界面

推理界面

首先我们点击 “刷新模型路径按钮”,将刚刚训练的子模型拉取进来。

刷新模型路径

刷新模型路径

然后点击 “是否开启TTS推理WebUI” 按钮,即可开启推理。

开启推理

开启推理

开启推理

开启推理

稍作等待,会弹出推理WebUI界面。

推理WebUI界面

推理WebUI界面

推理前我们需要给它一个目标音色参考音频,可以在\logs\YeShu\5-wav32k路径下取一个音频。

目标音色参考音频

目标音色参考音频

文本可以在\logs\YeShu\这个路径的这个文件里找到。

文本来源

文本来源

我们将音频和文字,还有语音填入推理界面相应的位置。

填入推理界面

填入推理界面

然后将我们想说的文本,填写到下面。并且选择一种切分方式,或者自己手动切分。

填写文本

填写文本

点击 “合成语音”。

合成语音

合成语音

听一下效果:

到此,推理部分完。

我们现在已经获得了一个训练完成的TTS模型。可以在推理界面输入任何文本,让其进行朗读。

实时变声

后续的变声部分还在更新当中。

实时变声

实时变声

结语:

GPT-SoVITS-WebUI凭借其强大的功能和易用性,为语音技术的爱好者和开发者提供了一个强大的工具。它使得语音合成、识别和处理变得更加高效和便捷。随着技术的不断发展,我们期待GPT-SoVITS-WebUI能在未来的日子里,为语音技术的探索和应用带来更多的可能性。

作者:学术Fun
链接:https://juejin.cn/post/7326853170080514084
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

AI 语音克隆怎么做?GPT-Sovits新手克隆声音教程,让我们一起学习克隆他人的声音(2024年入门级声音克隆升级版) - 知乎

mikel阅读(202)

来源: AI 语音克隆怎么做?GPT-Sovits新手克隆声音教程,让我们一起学习克隆他人的声音(2024年入门级声音克隆升级版) – 知乎

https://github.com/RVC-Boss/GPT-SoVITS?tab=readme-ov-file
    • 文件大小
文件大小
    • 解压
解压
  • 使用:
使用
  • 1:双击打开 go-webui.bat
双击打开 go-webui.bat
  • 2:自动弹出页面:
自动弹出页面:
  • 3:处理声音:人声分离
    • ✔会自动弹出一个新的链接页面(需要等一会儿,才弹出来)
✔会自动弹出一个新的链接页面(需要等一会儿,才弹出来)
    • 弹出来了
弹出来了
    • 在你的本地新建一个文件夹 todo-songs,吧需要处理的音频放进去,在吧路径复制过来
在你的本地新建一个文件夹 todo-songs,吧需要处理的音频放进去,在吧路径复制过来
    • 新建文件夹
新建文件夹
    • 复制
复制
    • 转换
转换
    • 格式看自己需求
式看自己需求
    • 输出文件:在output里
输出文件:在output里
    • 4:语音切分 记得把之前的勾取消,节省性能
语音切分 记得把之前的勾取消,节省性能
      • 把刚刚处理好的音频,复制过来,重新命名(这里我在之前创建的 todo-songs文件夹,重新新建了一个 01)
把刚刚处理好的音频,复制过来,重新命名(这里我在之前创建的 todo-songs文件夹,重新新建了一个 01)
      • 复制路径:
复制路径:
      • 直接语音切割
直接语音切割
      • 输出路径
输出路径
    • 5:中文批量离线ASR工具
中文批量离线ASR工具
      • 路径更改 把刚刚切割的输出路径复制过来
路径更改 把刚刚切割的输出路径复制过来
      • 直接点开启离线进程
会加载一些文件
直接点开启离线进程
      • 完成
完成
      • 输出的路径output\asr_opt
输出的路径output\asr_opt
    • 6:语音文本校对标注工具
语音文本校对标注工具
      • 右键复制
右键复制
      • cmd:使用命令行,找到路径,复制,粘贴,也可以
cmd:使用命令行,找到路径,复制,粘贴,
      • ✔,会弹出新的窗口
会弹出新的窗口
      • 检查,音频有没有问题,没有问题就直接保存
检查,音频有没有问题,没有问题就直接保存
      • 直接,保存
保存
    • 7: 1-GPT-SoVITS-TTS 记得把之前的勾取消掉,
1-GPT-SoVITS-TTS 记得把之前的勾取消掉,
      • 1A-训练集格式化工具
        • 复制 路径
复制 路径
复制 路径
        • 直接开始
直接开始
        • 结束
结束
    • 1B-微调训练
1B-微调训练
      • 开启SoVITS训练
保持默认直接开始训练
      • 开启GPT训练
开启训练
      • 这个GPT训练可能会爆错误,把每张显卡的batch_size和总训练轮数的值降低一点,没保存模型也是这样修改
      • 每50轮才会保存一个模型
    • 1C推理
1C推理
      • 先刷新
先刷新
      • 选择训练好的模型
选择训练好的模型
      • 是否开启TTS推理WebUl ✔
是否开启TTS推理WebUl ✔
      • 新的窗口
新的窗口
      • 设置
设置
      • 合成语音
合成语音
    • 下次想用这个模型就直接加载
下次想用这个模型就直接加载

使用 DISM 安全清理 C 盘 WinSxS 文件夹空间 - lindexi - 博客园

mikel阅读(112)

来源: 使用 DISM 安全清理 C 盘 WinSxS 文件夹空间 – lindexi – 博客园

本文将介绍如何使用系统内置 DISM 工具进行安全清理 C 盘空间,清理 WinSxS 文件夹里面的可回收删除的程序包空间

开始之前,先使用管理员权限打开 CMD 或 PowerShell 命令行窗口。在 Win11 下,可右击开始菜单,点击终端管理员打开管理员权限的 PowerShell 命令行窗口

先查看 WinSxS 文件夹里面的可回收删除的程序包数量和上次清理的时间,以及 WinSxS 文件夹所占用的实际空间,从而决定是否进行下一步动作

在命令行窗口输入以下命令用来确定 WinSxS 文件夹的实际大小

Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore

执行之后输出的内容大概如下:

部署映像服务和管理工具
版本: 10.0.22621.1

映像版本: 10.0.22621.1555

[==========================100.0%==========================]

组件存储(WinSxS)信息:

Windows 资源管理器报告的组件存储大小 : 9.09 GB

组件存储的实际大小 : 6.21 GB

    已与 Windows 共享 : 5.19 GB
    备份和已禁用的功能 : 1.02 GB
    缓存和临时数据 :  0 bytes

上次清理的日期 : 2023-05-03 15:10:13

可回收的程序包数 : 1
推荐使用组件存储清理 : 是

各个项的说明如下:

  • Windows 资源管理器报告的组件存储大小:Windows 资源管理器计算的 WinSxS 文件夹的大小值。 此值不会考虑 WinSxS 文件夹中使用的硬链接。
  • 组件存储的实际大小:此值考虑 WinSxS 文件夹中的硬链接。 它不会排除通过硬链接与 Windows 共享的文件。
  • 与 Windows 共享:此值提供使用硬链接的文件的大小,这些文件使用硬链接以便同时显示在组件存储和其他位置(为便于正常操作 Windows)中。 这包含在实际大小中,但不应视为组件存储开销的一部分。
  • 备份和禁用的功能:这是为响应更新组件中的故障或提供启用更多功能的选项而保留的组件的大小。 它还包括组件存储元数据和并行组件的大小。这包含在实际大小中,是组件存储开销的一部分。
  • 缓存和临时数据:这是组件存储在内部用于加快组件服务操作速度的文件的大小。 这包含在实际大小中,是组件存储开销的一部分。
  • 上次清理日期:这是最近完成组件存储清理的日期。
  • 可回收包数:这是组件清理可以删除的系统中被取代包的数量。
  • 建议的组件存储清理:这是组件存储清理建议。 如果执行清理过程可以减少组件存储开销的大小,则建议进行清理。

如看到推荐清理存储,或者是自己感觉想清理看,则可以执行以下命令进行清理。清理是安全的,清理稍微缓慢,多跑跑也只是最多浪费点时间而已,不会损坏系统

Dism.exe /Online /Cleanup-Image /StartComponentCleanup

执行以上命令即可进行安全的清理。清理完成可以再次执行 Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore 看看实际清理多少空间

如果觉得以上的命令清理的不够多,还可以再加上稍微危险的 /ResetBase 命令,此命令在 Windows 10 或更高版本的运行版本中,将删除组件存储区中每个组件的所有替换版本。换句话说就是丢失卸载补丁的功能,使用 /ResetBase 选项运行 /StartComponentCleanup 后,将无法卸载已安装的 Windows 更新。只有在确定自己当前的系统足够稳定时,也就是不需要卸载补丁才能使用如下命令

Dism.exe /online /Cleanup-Image /StartComponentCleanup /ResetBase

更多命令参数,请参阅 DISM 操作系统包(.cab 或 .msu)服务命令行选项 Microsoft Learn 文档

参考文档:

清理 WinSxS 文件夹 Microsoft Learn

ThinkPHP 页面跳转和重定向_thinkphp $this->success 重定向到指定页面-CSDN博客

mikel阅读(114)

来源: ThinkPHP 页面跳转和重定向_thinkphp $this->success 重定向到指定页面-CSDN博客

系统Controller类内置跳转方法error和success,分别用于错误提示和成功跳转。
两个方法分别有三个参数:
参数1:提示信息
参数2:跳转地址
参数3:跳转页面等待时间(秒)

$New = M(‘New’); //实例化New对象
$result = $New->add($data);
if($result){
// 成功后跳转到新闻列表页面
$this->success(‘新增成功,即将返回列表页面’, ‘/New/index’);
} else {
// 错误页面的默认跳转页面是返回前一页,通常不需要设置
$this->error(‘新增失败’);
}

success error跳转对应的模板

//默认错误跳转对应的模板文件
‘TMPL_ACTION_ERROR’ => THINK_PATH . ‘Tpl/dispatch_jump.tpl’,
//默认成功跳转对应的模板文件
‘TMPL_ACTION_SUCCESS’ => THINK_PATH . ‘Tpl/dispatch_jump.tpl’,

自定义跳转模板
将模板直接放到项目目录下

//默认错误跳转对应的模板文件
‘TMPL_ACTION_ERROR’ => ‘Common@Public/error’,
//默认成功跳转对应的模板文件
‘TMPL_ACTION_SUCCESS’ => ‘Common@Public/success’,

自定义模板中可以使用模板变量

$message 页面成功提示信息
$error 页面错误提示信息
$waitSecond 跳转等待时间 单位为秒
$jumpUrl 跳转页面地址

重定向
使用constroller的redirect方法来实现页面重定向跳转。

redirect(‘重定向操作地址(一般为[控制器/操作])’,’参数(字符串或者数组)’,’重定向等待时间(秒)’,’重定向提示信息’)

例:

$result = $New->add($data);
if($result){
// 停留5秒后跳转到New模块的category操作,并且显示页面跳转中字样
$this->redirect(‘New/category’, ‘cate_id=2&status=1′, 5,’页面跳转中…’);
} else {
// 错误页面
$this->redirect(‘New/error’);
}
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/Cc_Rain0624/article/details/52369441

getimagesize引发failed to open stream: HTTP request failed! 的问题_getimagesize failed to open stream: http request f-CSDN博客

mikel阅读(126)

来源: getimagesize引发failed to open stream: HTTP request failed! 的问题_getimagesize failed to open stream: http request f-CSDN博客

php中getimagesize()引发failed to open stream: HTTP request failed! 的问题

这种一般是由于自己的代码和请求的远程图片编码不一致问题导致

首先你需要统一编码

比如有问题的图片为:$img

处理:

$img = iconv(‘gbk’, ‘utf-8’, $img);

在调用图片函数:

$info = getimagesize($img);

结束~

画外音:有时候iconv会导致一些报错信息,这个在这不讨论,也和这个问题无论,加上这个可以忽略。

iconv(‘gbk’, ‘utf-8//IGNORE’, $url)
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/u011056818/article/details/81539222

failed to open stream: No such file or directory问题解决大全-CSDN博客

mikel阅读(124)

来源: failed to open stream: No such file or directory问题解决大全-CSDN博客

这篇文章主要为大家详细介绍了failed to open stream: No such file or directory问题解决大全,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,有需要的朋友可以收藏方便以后借鉴。

failed to open stream: No such file or directory是PHP站点经常可能会遇到的问题,361源码做了个总结,希望能帮助到一些遇到这个问题的朋友们。

案例一:

(failed to open stream: No such file or directory)在IIS下PHP环境配置的目录权限导致出错的问题

原因及解决方法:

配置环境为 IIS + php

如果确认你的程序在其他环境下下可以正常运行而唯独在Win 下的 IIS 出现类似如下的错误:

Warning: main(./Config.php): failed to open stream: No such file or directory in D:/wwwroot/Demo/Config.php on line 13

Fatal error: main(): Failed opening required ‘./Config.php’ (include_path=’.;c:/php4/pear’) in D:/wwwroot/Core/Config.php on line 13

这个问题主要是 由于Win NTFS盘下去除了everyone 权限引起的, 在安全权限中加个 Internet 来宾账号就解决了.

操作步骤: D盘 -> 属性 -> 安全 -> 添加 用户 IUSR_XXXXX OK

案例二:

问题就是:

Warning: require_once(../lib/DBUtil.class.php) [function.require-once]: failed to open stream: No such file or directory in E:/phppro/dxh/service/ExpertService.class.php on line 2

Fatal error: require_once() [function.require]: Failed opening required ‘../lib/DBUtil.class.php’ (include_path=’.;C:/php5/pear’) in E:/phppro/dxh/service/ExpertService.class.php on line 2

解决方法:

在require时加上dirname(__FILE__),像这样: require_once(dirname(__FILE__).”/../lib/DBUtil.class.php”);
如下理解 require_once实例:
<?php
//如果b.php被其他目录里的a.php文件require 或者 include 去引用的话 require_once(“./c.php”);
//实际上调用的是a.php目录下的c.php require_once(dirname(__FILE__).”/c.php”);
//实际上调用的是b.php目录下的c.php require_once(“c.php”);
//实际上调用的是b.php目录下的c.php
?>
案例三:

运行php网站,出错,内容如下:

Warning: Unknown: failed to open stream: No such file or directory in Unknown on line 0

Fatal error: Unknown: Failed opening required ‘E:/php/www/mrsoft/注册登录模块/index.php’ (include_path=’.;C:/php5/pear’) in Unknown on line 0

解决方法:

apache不能解析上图中“注册登录模块”的中文URL,把它换成英文路径即可。

总结:

关于failed to open stream: No such file or directory出现的问题,大体就分为这3大类型。如果你也遇到了这样的报错,你可以仔细比对属于哪个类型的错误。根据上面的提示和解决办法处理,相信很快就能解决问题。
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_64051447/article/details/130746697

PHP使用phpqrcode生成二维码详解 - 掘金

mikel阅读(130)

来源: PHP使用phpqrcode生成二维码详解 – 掘金

1.phpqrcode类文件下载,下载地址: PHP QR Code download | SourceForge.net 。点击Downioad下载

image.png

下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):

image.png

2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)

3.PHP代码

3.1. 生成二维码(生成图片文件)   每调用一次都会在本地生成一张二维码图片
php

复制代码
function scerweima($url=''){undefined
    require_once 'phpqrcode.php';
    
    $value = $url;                    //二维码内容
    
    $errorCorrectionLevel = 'L';    //容错级别 
    $matrixPointSize = 5;            //生成图片大小  
    
    //生成二维码图片
    $filename = 'qrcode/'.microtime().'.png';
    QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);  
  
    $QR = $filename;                //已经生成的原始二维码图片文件  
 
 
    $QR = imagecreatefromstring(file_get_contents($QR));  
  
    //输出图片  
    imagepng($QR, 'qrcode.png');  
    imagedestroy($QR);
    return '<img src="qrcode.png" alt="使用微信扫描支付">';   
}
 
//调用查看结果
echo scerweima('https://www.baidu.com');
 
3.2. 在生成的二维码中加上logo(生成图片文件)    每调用一次都会在本地生成一张二维码图片

image.png

php

复制代码
function scerweima1($url=''){undefined
    require_once 'phpqrcode.php';
    $value = $url;                    //二维码内容  
    $errorCorrectionLevel = 'H';    //容错级别  
    $matrixPointSize = 6;            //生成图片大小  
    //生成二维码图片
    $filename = 'qrcode/'.microtime().'.png';
    QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);  
    
    $logo = 'qrcode/logo.jpg';     //准备好的logo图片   
    $QR = $filename;            //已经生成的原始二维码图  
 
    if (file_exists($logo)) {   
        $QR = imagecreatefromstring(file_get_contents($QR));           //目标图象连接资源。
        $logo = imagecreatefromstring(file_get_contents($logo));       //源图象连接资源。
        $QR_width = imagesx($QR);            //二维码图片宽度   
        $QR_height = imagesy($QR);            //二维码图片高度   
        $logo_width = imagesx($logo);        //logo图片宽度   
        $logo_height = imagesy($logo);        //logo图片高度   
        $logo_qr_width = $QR_width / 4;       //组合之后logo的宽度(占二维码的1/5)
        $scale = $logo_width/$logo_qr_width;       //logo的宽度缩放比(本身宽度/组合后的宽度)
        $logo_qr_height = $logo_height/$scale;  //组合之后logo的高度
        $from_width = ($QR_width - $logo_qr_width) / 2;   //组合之后logo左上角所在坐标点
        
        //重新组合图片并调整大小
        /*
         *    imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
         */
        imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height); 
    }   
  
    //输出图片  
    imagepng($QR, 'qrcode.png');  
    imagedestroy($QR);
    imagedestroy($logo);
    return '<img src="qrcode.png" alt="使用微信扫描支付">';   
}
 
//调用查看结果
echo scerweima1('https://www.baidu.com');
 
3.3. 生成二维码(不生成图片文件)   不生成文件,会直接输出二维码到浏览器中。
ini

复制代码
function scerweima2($url=''){undefined
    require_once 'phpqrcode.php';
    
    $value = $url;                    //二维码内容
    $errorCorrectionLevel = 'L';    //容错级别 
    $matrixPointSize = 5;            //生成图片大小  
    //生成二维码图片
    $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
}
//调用查看结果
scerweima2('https://www.baidu.com');
作者:么得感情的攻城狮
链接:https://juejin.cn/post/7078630229492629517
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

php file_get_contents怎么读取图片 - 问答 - 亿速云

mikel阅读(112)

来源: php file_get_contents怎么读取图片 – 问答 – 亿速云

要使用file_get_contents函数读取图片,需要提供图片的URL地址作为参数。示例代码如下:

$imageUrl = 'https://example.com/image.jpg';
$imageData = file_get_contents($imageUrl);

// 保存图片到本地文件
file_put_contents('path/to/save/image.jpg', $imageData);

在上述示例中,$imageUrl是图片的URL地址,$imageData是通过file_get_contents函数获取的图片内容。然后,可以使用file_put_contents函数将图片内容保存到本地文件中。请将path/to/save/image.jpg替换为您要保存图片的本地路径。

请注意,使用file_get_contents读取大型或者远程服务器上的图片可能会导致内存溢出,这种情况下可以考虑使用stream_context_create函数和fopen函数来处理。以下是一个使用stream_context_createfopen函数的示例:

$imageUrl = 'https://example.com/image.jpg';

$context = stream_context_create(['http' => ['user_agent' => 'Mozilla/5.0 (Windows NT 6.1; rv:35.0) Gecko/20100101 Firefox/35.0']]);
$imageFile = fopen('path/to/save/image.jpg', 'w');
stream_copy_to_stream(fopen($imageUrl, 'r', false, $context), $imageFile);
fclose($imageFile);

在上述示例中,stream_context_create函数用于创建一个包含用户代理信息的上下文,避免某些远程服务器拒绝访问的限制。然后,使用fopen函数打开本地文件和远程图片文件,并使用stream_copy_to_stream函数将远程图片内容复制到本地文件。最后,关闭文件句柄。同样,请将path/to/save/image.jpg替换为您要保存图片的本地路径。

购买使用亿速云服务器,可以极大降低初创企业、中小企业以及个人开发者等用户群体的整体IT使用成本,无需亲自搭建基础设施、简化了运维和管理的日常工作量,使用户能够更专注于自身的业务发展和创新。

php将远程图片保存到本地,php使用file_get_contents 将远程图片保存到本地_php保存图片到本地-CSDN博客

mikel阅读(102)

来源: php将远程图片保存到本地,php使用file_get_contents 将远程图片保存到本地_php保存图片到本地-CSDN博客

需求背景:将远程图片保存至本地

PHP可以使用 file_get_contents 函数和 file_put_contents 函数来将远程图片保存到本地。具体步骤如下:

使用 file_get_contents 函数获取远程图片的内容。

$url = ‘http://example.com/image.jpg’;
$imgContent = file_get_contents($url);

使用 file_put_contents 函数将获取到的图片内容保存到本地文件中。

$localPath = ‘/path/to/local/image.jpg’;
file_put_contents($localPath, $imgContent);

完整的代码如下所示:

$url = ‘http://example.com/image.jpg’;
$localPath = ‘/path/to/local/image.jpg’;
$imgContent = file_get_contents($url);
file_put_contents($localPath, $imgContent);

在上面的代码中,我们先定义了远程图片的 URL 和本地图片的路径,然后使用 file_get_contents 函数获取远程图片的内容,并将其保存到 $imgContent 变量中。最后,使用 file_put_contents 函数将 $imgContent 的内容保存到本地文件中。
需要注意的是,使用该方法保存远程图片时,需要确保 PHP 环境对远程文件的访问权限。如果远程图片需要进行身份验证或者需要通过代理服务器访问,可以使用 CURL 函数来获取图片内容。
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/gjwgjw1111/article/details/129572956

使用phpqrcode生成二维码 - 简书

mikel阅读(110)

来源: 使用phpqrcode生成二维码 – 简书

在项目中使用的到了显示二维码,网上搜了一下php主要使用phpqrcode实现。

        $data = 'www.baidu.com'; 
        $level = 'L';// 纠错级别:LMQH
        $size = 6;// 点的大小:110,用于手机端4就可以了
        
        include EXTEND_PATH.'org/phpqrcode/phpqrcode.php';
        $QRcode = new \QRcode();
        ob_start();
        $QRcode->png($data,false,$level,$size);
        $imageString = base64_encode(ob_get_contents());
        ob_end_clean();
        //$path=ROOT_PATH.'public/static/images/qrcode/';
        //$QRcode->png($data,$path.$fileName,$level,$size);// 生成本地图片
        return $imageString;

上面的代码是生成一个base64的字符串,在页面如下使用就可以显示图片了。

<img src="data:image/png;base64,这里是base64编码内容" />

关于QRcode::png方法参数说明:

1.第一个参数$text,就是上面代码里的URL网址参数,
2.第二个参数$outfile默认为否,不生成文件,只将二维码图片返回,否则需要给出存放生成二维码图片的路径
3.第三个参数$level默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%),M(QR_ECLEVEL_M,15%),Q(QR_ECLEVEL_Q,25%),H(QR_ECLEVEL_H,30%)。这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比。利用二维维码的容错率,我们可以将头像放置在生成的二维码图片任何区域。
4.第四个参数$size,控制生成图片的大小,默认为4
5.第五个参数$margin,控制生成二维码的空白区域大小
6.第六个参数$saveandprint,保存二维码图片并显示出来,$outfile必须传递图片路径。

第二个参数默认是false,方法返回的是二进制的图片流。生成在缓冲区的,在页面输出的时候会从缓冲区送到浏览器。所以在代码中是使用log输出是不会记录在日志中的,也不需要使用echo进行内容输出。所以直接使用base64_encode(QRcode::png)是没有用的。
这里使用到了ob_start()方法,打开输出缓冲区,所有的输出信息不在直接发送到浏览器,而是保存在输出缓冲区里面。这里就是把生成的图片流从缓冲区保存到内存对象上,使用base64_encode变成编码字符串,通过json返回给页面。
看一下直接使用QRcode::png返回图片流到浏览器


最后简单说一下ob:
ob是output buffering的简称,而不是output cache,ob用对了是能对速度有一定的帮助,但是盲目的加上ob函数,只会增加CPU额外的负担。说说ob的基本作用:
1.防止在浏览器有输出之后再使用setcookie,或者header,session_start函数造成的错误。(我本以为最开始说的代码是这样的作用,但后来朋友说不是的),其实这样的用法少用为好,养成良好的代码习惯。
2.捕捉对一些不可获取的函数的输出,比如phpinfo会输出一大堆的HTML,但是我们无法用一个变量例如$info=phpinfo();来捕捉,这时候ob就管用了。
3.对输出的内容进行处理,例如进行gzip压缩,例如进行简繁转换,例如进行一些字符串替换。
4.生成静态文件,其实就是捕捉整页的输出,然后存成文件,经常在生成HTML,或者整页缓存中使用。
对于刚才说的第三点中的GZIP压缩,可能是很多人想用,却没有真真用上的,加一个ob_gzhandler这个回调函数就可以了。

ob_start(ob_gzhandler);
内容
echo ob_get_contents() ;
ob_end_flush();

作者:可乐爱上咖啡
链接:https://www.jianshu.com/p/768e72938237
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。