当前位置:   article > 正文

对接腾讯云接口实现AI绘画PHP代码_php 腾讯云文生图接口

php 腾讯云文生图接口

前些时候发现腾讯云新出了个AI绘画,就想试着能否写一个网页代码实现AI绘画的功能

在AI 的帮助下,实现了此功能,但是有些地方有待完善,目前可以实现文生图的功能。

本项目Github地址:suyin101/tencentaidraw: 对接腾讯云官方接口AI绘画做的 (github.com)

演示地址:苏音 | 苏音资源网 - 提供免费资源分享-我爱分享网 (suyin66.com) 

先放出代码吧~

代码

index.php

  1. <?php
  2. ?>
  3. <!DOCTYPE html>
  4. <html>
  5. <head>
  6. <title>AI绘画--苏音</title>
  7. <style>
  8. body {
  9. font-family: Arial, sans-serif;
  10. margin: 0;
  11. padding: 0;
  12. background-color: #f1f1f1;
  13. }
  14. .container {
  15. max-width: 500px;
  16. margin: 0 auto;
  17. padding: 20px;
  18. background-color: #fff;
  19. border-radius: 5px;
  20. box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
  21. }
  22. h1 {
  23. font-size: 24px;
  24. text-align: center;
  25. margin-bottom: 20px;
  26. }
  27. .form-group {
  28. margin-bottom: 20px;
  29. }
  30. .form-group label {
  31. display: block;
  32. font-size: 16px;
  33. margin-bottom: 5px;
  34. }
  35. .form-group input[type="text"] {
  36. width: 100%;
  37. padding: 10px;
  38. font-size: 16px;
  39. border: 1px solid #ccc;
  40. border-radius: 4px;
  41. }
  42. .form-group button {
  43. display: block;
  44. width: 100%;
  45. padding: 10px;
  46. font-size: 16px;
  47. background-color: #4caf50;
  48. color: #fff;
  49. border: none;
  50. border-radius: 4px;
  51. cursor: pointer;
  52. }
  53. .styled-select {
  54. position: relative;
  55. display: block;
  56. width: 100%;
  57. height: 40px;
  58. background-color: #fff;
  59. border: 1px solid #ccc;
  60. border-radius: 4px;
  61. padding: 0 10px;
  62. font-size: 16px;
  63. color: #333;
  64. cursor: pointer;
  65. }
  66. .styled-select::after {
  67. content: "\25BC";
  68. position: absolute;
  69. top: 50%;
  70. right: 10px;
  71. transform: translateY(-50%);
  72. font-size: 16px;
  73. }
  74. .styled-select select {
  75. position: absolute;
  76. top: 0;
  77. left: 0;
  78. width: 100%;
  79. height: 100%;
  80. opacity: 0;
  81. cursor: pointer;
  82. }
  83. #result {
  84. text-align: center;
  85. margin-top: 30px;
  86. }
  87. #result .loader {
  88. display: none;
  89. margin: 0 auto;
  90. width: 50px;
  91. height: 50px;
  92. border: 5px solid #f3f3f3;
  93. border-top: 5px solid #3498db;
  94. border-radius: 50%;
  95. animation: spin 2s linear infinite;
  96. }
  97. #result img {
  98. max-width: 100%;
  99. height: auto;
  100. display: none;
  101. margin-top: 20px;
  102. }
  103. @media only screen and (max-width: 600px) {
  104. .container {
  105. max-width: 100%;
  106. border-radius: 0;
  107. box-shadow: none;
  108. padding: 10px;
  109. }
  110. .form-group input[type="text"],
  111. .form-group button {
  112. font-size: 14px;
  113. }
  114. }
  115. @keyframes spin {
  116. 0% {
  117. transform: rotate(0deg);
  118. }
  119. 100% {
  120. transform: rotate(360deg);
  121. }
  122. }
  123. </style>
  124. </head>
  125. <body>
  126. <div class="container">
  127. <h1>AI绘画苏音</h1>
  128. <div class="form-group">
  129. <label for="prompt">请输入关键词:</label>
  130. <input type="text" id="prompt" placeholder="AI绘画描述词,越详细越好" />
  131. </div>
  132. <div class="form-group">
  133. <label for="styles">选择风格:</label>
  134. <select id="styles" class="styled-select">
  135. <option value="101">水墨画</option>
  136. <option value="102">概念艺术</option>
  137. <option value="103">油画</option>
  138. <option value="104">水彩画</option>
  139. <option value="106">厚涂风格</option>
  140. <option value="107">插画</option>
  141. <option value="108">剪纸风格</option>
  142. <option value="109">印象派</option>
  143. <option value="110">2.5D</option>
  144. <option value="111">肖像画</option>
  145. <option value="112">黑白素描画</option>
  146. <option value="113">赛博朋克</option>
  147. <option value="114">科幻风格</option>
  148. <option value="115">暗黑风格</option>
  149. <option value="201">日系动漫</option>
  150. <option value="202">怪兽风格</option>
  151. <option value="301">游戏卡通手绘</option>
  152. <option value="401">通用写实风格</option>
  153. </select>
  154. </div>
  155. <div class="form-group">
  156. <button onclick="callAPI()">开始生成</button>
  157. </div>
  158. <div id="result">
  159. <div class="loader"></div>
  160. <img id="result-image" />
  161. </div>
  162. <div id="remaining-count">
  163. 剩余次数: <span id="count"></span>
  164. </div>
  165. </div>
  166. <script>
  167. // 从localStorage获取剩余次数,如果不存在则设置为初始值3
  168. var remainingCount = localStorage.getItem("remainingCount") || 20;
  169. function callAPI() {
  170. if (remainingCount <= 0) {
  171. alert("每个IP只能成功调用三十次接口。");
  172. return;
  173. }
  174. var userPrompt = document.getElementById("prompt").value;
  175. var stylesSelect = document.getElementById("styles");
  176. var selectedStyle = stylesSelect.value;
  177. if (userPrompt.trim() === "") {
  178. alert("请输入关键词");
  179. return;
  180. }
  181. if (!isValidStyle(selectedStyle)) {
  182. alert("请选择有效的风格");
  183. return;
  184. }
  185. var url =
  186. "你的网站/proxy.php?prompt=" +
  187. encodeURIComponent(userPrompt) +
  188. "&Styles=" +
  189. selectedStyle;
  190. var loader = document.querySelector("#result .loader");
  191. loader.style.display = "block";
  192. var xhr = new XMLHttpRequest();
  193. xhr.onreadystatechange = function() {
  194. if (xhr.readyState === XMLHttpRequest.DONE) {
  195. loader.style.display = "none";
  196. if (xhr.status === 200) {
  197. var response = JSON.parse(xhr.responseText);
  198. var resultImage = response.ResultImage;
  199. displayImage(resultImage);
  200. // 减少剩余次数并更新页面上的显示
  201. remainingCount--;
  202. document.getElementById("count").innerText = remainingCount;
  203. // 将剩余次数存储在localStorage中
  204. localStorage.setItem("remainingCount", remainingCount);
  205. } else {
  206. console.error("请求发生错误");
  207. }
  208. }
  209. };
  210. xhr.open("GET", url, true);
  211. xhr.send();
  212. }
  213. function displayImage(base64Data) {
  214. var image = document.getElementById("result-image");
  215. image.src = "data:image/png;base64," + base64Data;
  216. image.style.display = "block";
  217. }
  218. function isValidStyle(style) {
  219. return /^[0-9]+$/.test(style);
  220. }
  221. </script>
  222. </body>
  223. </html>

draw.php

  1. <?php
  2. require_once 'vendor/autoload.php';
  3. use TencentCloud\Common\Credential;
  4. use TencentCloud\Common\Profile\ClientProfile;
  5. use TencentCloud\Common\Profile\HttpProfile;
  6. use TencentCloud\Common\Exception\TencentCloudSDKException;
  7. use TencentCloud\Aiart\V20221229\AiartClient;
  8. use TencentCloud\Aiart\V20221229\Models\TextToImageRequest;
  9. try {
  10. // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey
  11. // 请注意保密密钥,不要将真实密钥泄露在代码中
  12. $cred = new Credential("你的SecretId", "你的SecretKey");
  13. // 实例化一个 HTTP 选项,可选的,没有特殊需求可以跳过
  14. $httpProfile = new HttpProfile();
  15. $httpProfile->setEndpoint("aiart.tencentcloudapi.com");
  16. // 实例化一个 ClientProfile 对象,可选的,没有特殊需求可以跳过
  17. $clientProfile = new ClientProfile();
  18. $clientProfile->setHttpProfile($httpProfile);
  19. // 实例化要请求产品的 Client 对象
  20. $client = new AiartClient($cred, "ap-shanghai", $clientProfile);
  21. // 实例化一个 TextToImageRequest 对象
  22. $req = new TextToImageRequest();
  23. $userInput = $_GET['prompt'];
  24. $styles = $_GET['Styles'];
  25. // 检查风格参数是否为整数数字
  26. if (!is_numeric($styles)) {
  27. // 风格参数无效,返回错误响应
  28. $response = array(
  29. 'error' => 'Invalid Styles parameter'
  30. );
  31. header('Content-Type: application/json');
  32. echo json_encode($response);
  33. exit;
  34. }
  35. $params = array(
  36. "Prompt" => $userInput,
  37. "Styles" => array(strval($styles)) // 将风格参数转换为字符串
  38. );
  39. $req->fromJsonString(json_encode($params));
  40. // 返回的 resp 是一个 TextToImageResponse 对象,与请求对象对应
  41. $resp = $client->TextToImage($req);
  42. // 输出 json 格式的字符串响应
  43. header('Content-Type: application/json');
  44. echo $resp->toJsonString();
  45. } catch (TencentCloudSDKException $e) {
  46. echo $e;
  47. }

proxy.php

  1. <?php
  2. //
  3. $apiUrl = '你的网站/draw.php';
  4. $prompt = $_GET['prompt'];
  5. $styles = $_GET['Styles'];
  6. // 检查风格参数是否为整数数字
  7. if (!is_numeric($styles)) {
  8. // 风格参数无效,返回错误响应
  9. $response = array(
  10. 'error' => 'Invalid Styles parameter'
  11. );
  12. header('Content-Type: application/json');
  13. echo json_encode($response);
  14. exit;
  15. }
  16. // 构建请求 URL,包括风格参数
  17. $requestUrl = $apiUrl . '?prompt=' . urlencode($prompt) . '&Styles=' . urlencode($styles);
  18. // 发起请求并获取响应
  19. $response = file_get_contents($requestUrl);
  20. // 将响应发送回前端
  21. header('Content-Type: application/json');
  22. echo $response;

代码目录

index.php 首页文件

draw.php 接口代码

proxy.php 代理接口文件

部署教程

把以上三个文件都放到网站中,并修改相应内容

image-20230825224141296

image-20230825224928037

image-20230825224946476

且需要安装Composer依赖

具体可以参考腾讯云的文档和这个

API Explorer - 云 API - 控制台 (tencent.com)

PHP-SDK 中心-腾讯云 (tencent.com)

宝塔Linux面板安装Composer依赖管理工具与PHP依赖包的方法宝塔面板安装composer苏音资源的博客-CSDN博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/129509
推荐阅读
相关标签
  

闽ICP备14008679号