<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>手里有只毛毛虫</title><description>号角声起 - 等你启航</description><link>https://netlify.krjojo.com/</link><language>zh-CN</language><item><title>拥抱静态 迁移至astro</title><link>https://netlify.krjojo.com/%E6%8B%A5%E6%8A%B1%E9%9D%99%E6%80%81-%E8%BF%81%E7%A7%BB%E8%87%B3astro/</link><guid isPermaLink="true">https://netlify.krjojo.com/%E6%8B%A5%E6%8A%B1%E9%9D%99%E6%80%81-%E8%BF%81%E7%A7%BB%E8%87%B3astro/</guid><description>## 前因

最近越来越忙，没什么精力更新文章了，加上年初域名迁移至cloudflare，导致备案掉了。服务器也只能用国外，速度不理想也不稳定，决定把内容迁移至静态，起码哪天服务器宕机也能正常访问。

精力实在优先，界面就懒得装修了，DEMO风，反正过不了多久也会看厌，秉承“能跑就行”的原则。

**选题**

- 前端 Astro
- 后端 Fiber

## 迁移

- [x] 页面迁移
  - [x] `post`文章页
    - [x] 数据同步
    - 分页路径发生改变
  - [x] `tag`标签页
  - [x] `category`分类页
  - [x] `docs`文档页
    - [x] 数据同步
  - ~~[ ] `sentences`一言~~
  - [x] `games`游戏库
  - [x] `about`关于我
  - [x] `links`友情链接
    - [x] 友情申请(评论区代替)
  - ~~[ ] `rss-aggregator`RSS 聚合~~
  - [x] `track`我的足迹
  - ~~[ ] `archives`时间归档~~
  - ~~[ ] `monitor`服务监控~~
  - ~~[ ] `nav`网址导航~~
  - [x] `contact`联系我们
  - [x] `privacy`隐私政策
  - ~~[ ] `music`音乐~~
  - ~~[ ] `gallery`随手一拍~~
- [x] 评论
  - [x] 数据迁移
  - [x] 评论回复
  - [x] 邮件通知

## 更变事项

分页发生变化

第一页相同`/post`，后续发生变化，原本`/post/page/2`，现在`/post/2`。

影响范围

- `/post`
- `/category/*`
- `/tag/*`

网站地图发生变化

原本`/sitemap.xml`、`/sitemap_index.xml`，现在`/sitemap-index.xml`

rss订阅发生变化

原本`/feed`、`/rss`，现在`/feed.xml`

## 后续计划

等有空了，把评论也实现静态化。</description><pubDate>Sun, 17 May 2026 13:27:14 GMT</pubDate><content:encoded>&lt;h2 id=&quot;前因&quot;&gt;前因&lt;/h2&gt;
&lt;p&gt;最近越来越忙，没什么精力更新文章了，加上年初域名迁移至cloudflare，导致备案掉了。服务器也只能用国外，速度不理想也不稳定，决定把内容迁移至静态，起码哪天服务器宕机也能正常访问。&lt;/p&gt;
&lt;p&gt;精力实在优先，界面就懒得装修了，DEMO风，反正过不了多久也会看厌，秉承“能跑就行”的原则。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;选题&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;前端 Astro&lt;/li&gt;
&lt;li&gt;后端 Fiber&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;迁移&quot;&gt;迁移&lt;/h2&gt;
&lt;ul class=&quot;contains-task-list&quot;&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; checked disabled&gt; 页面迁移
&lt;ul class=&quot;contains-task-list&quot;&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; checked disabled&gt; &lt;code&gt;post&lt;/code&gt;文章页
&lt;ul class=&quot;contains-task-list&quot;&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; checked disabled&gt; 数据同步&lt;/li&gt;
&lt;li&gt;分页路径发生改变&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; checked disabled&gt; &lt;code&gt;tag&lt;/code&gt;标签页&lt;/li&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; checked disabled&gt; &lt;code&gt;category&lt;/code&gt;分类页&lt;/li&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; checked disabled&gt; &lt;code&gt;docs&lt;/code&gt;文档页
&lt;ul class=&quot;contains-task-list&quot;&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; checked disabled&gt; 数据同步&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;del&gt;[ ] &lt;code&gt;sentences&lt;/code&gt;一言&lt;/del&gt;&lt;/li&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; checked disabled&gt; &lt;code&gt;games&lt;/code&gt;游戏库&lt;/li&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; checked disabled&gt; &lt;code&gt;about&lt;/code&gt;关于我&lt;/li&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; checked disabled&gt; &lt;code&gt;links&lt;/code&gt;友情链接
&lt;ul class=&quot;contains-task-list&quot;&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; checked disabled&gt; 友情申请(评论区代替)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;del&gt;[ ] &lt;code&gt;rss-aggregator&lt;/code&gt;RSS 聚合&lt;/del&gt;&lt;/li&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; checked disabled&gt; &lt;code&gt;track&lt;/code&gt;我的足迹&lt;/li&gt;
&lt;li&gt;&lt;del&gt;[ ] &lt;code&gt;archives&lt;/code&gt;时间归档&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;[ ] &lt;code&gt;monitor&lt;/code&gt;服务监控&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;[ ] &lt;code&gt;nav&lt;/code&gt;网址导航&lt;/del&gt;&lt;/li&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; checked disabled&gt; &lt;code&gt;contact&lt;/code&gt;联系我们&lt;/li&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; checked disabled&gt; &lt;code&gt;privacy&lt;/code&gt;隐私政策&lt;/li&gt;
&lt;li&gt;&lt;del&gt;[ ] &lt;code&gt;music&lt;/code&gt;音乐&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;[ ] &lt;code&gt;gallery&lt;/code&gt;随手一拍&lt;/del&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; checked disabled&gt; 评论
&lt;ul class=&quot;contains-task-list&quot;&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; checked disabled&gt; 数据迁移&lt;/li&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; checked disabled&gt; 评论回复&lt;/li&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; checked disabled&gt; 邮件通知&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;更变事项&quot;&gt;更变事项&lt;/h2&gt;
&lt;p&gt;分页发生变化&lt;/p&gt;
&lt;p&gt;第一页相同&lt;code&gt;/post&lt;/code&gt;，后续发生变化，原本&lt;code&gt;/post/page/2&lt;/code&gt;，现在&lt;code&gt;/post/2&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;影响范围&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/post&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/category/*&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/tag/*&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;网站地图发生变化&lt;/p&gt;
&lt;p&gt;原本&lt;code&gt;/sitemap.xml&lt;/code&gt;、&lt;code&gt;/sitemap_index.xml&lt;/code&gt;，现在&lt;code&gt;/sitemap-index.xml&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;rss订阅发生变化&lt;/p&gt;
&lt;p&gt;原本&lt;code&gt;/feed&lt;/code&gt;、&lt;code&gt;/rss&lt;/code&gt;，现在&lt;code&gt;/feed.xml&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&quot;后续计划&quot;&gt;后续计划&lt;/h2&gt;
&lt;p&gt;等有空了，把评论也实现静态化。&lt;/p&gt;</content:encoded><category>WordPress</category><category>博客</category><category>Astro</category><category>迁移</category><category>静态</category><author>Miniwater</author></item><item><title>PHP 利用ImageMagick实现多页PDF转一张图片</title><link>https://netlify.krjojo.com/php-%E5%88%A9%E7%94%A8imagemagick%E5%AE%9E%E7%8E%B0%E5%A4%9A%E9%A1%B5pdf%E8%BD%AC%E4%B8%80%E5%BC%A0%E5%9B%BE%E7%89%87/</link><guid isPermaLink="true">https://netlify.krjojo.com/php-%E5%88%A9%E7%94%A8imagemagick%E5%AE%9E%E7%8E%B0%E5%A4%9A%E9%A1%B5pdf%E8%BD%AC%E4%B8%80%E5%BC%A0%E5%9B%BE%E7%89%87/</guid><description>## 需求

最近业务需要，需要在后端生成一张图片报告，思来想去，发现先生成规整的pdf后，再把pdf转成图片会轻松不少。

目前网上的教程都是每页pdf单独转一张jpg，而需求是所有页面合并成一张图片。

搜了网上不少教程，都是一页转一张，这次把合并的空白补上

## 准备工作

* 准备一份pdf文件
* 安装ImageMagick php扩展
* 安装Ghostscript

&gt; **为什么要装Ghostscript？**
&gt; PHP 本身并没有能力阅读 PDF，需借助第三方程序 Ghostscript

&gt; **为什么偏偏Ghostscript，而不是其他第三方工具？**
&gt; ImageMagick 处理 PDF时，默认设置调用的就是 Ghostscript。同理：
&gt; * 处理 JPG，调用的是 libjpeg。
&gt; * 处理 PNG，调用的是 libpng。

### Ghostscript(linux版要注意)

检查 ImageMagick 的安全策略。找到 `/etc/ImageMagick-6/policy.xml` 或 `/etc/ImageMagick/policy.xml` 。

确保放开读写权限

```xml
&lt;policy domain=&quot;coder&quot; rights=&quot;none&quot; pattern=&quot;PDF&quot; /&gt;
&lt;!-- 改为 --&gt;
&lt;policy domain=&quot;coder&quot; rights=&quot;read|write&quot; pattern=&quot;PDF&quot; /&gt;
```

测试是否生效

```shell
identify /root/pdf路径.pdf
```

改完策略要重启php-fpm服务，注意替换php版本

```shell
/etc/init.d/php-fpm-84 restart
```

## 实现

处理逻辑：

1. 把PDF每一页单独生成图片，再把每张图片拼接起来。
2. 每张图片间隙设置负数，消除pdf页脚的空白。
3. 把图片四周白边消除，防止最后一页PDF未满的情况下，给图片底部留下大量空白。
4. 再重新为图片生成白色边框，与背景色融为一体。

```php
// pdf路径
$pdf_path = &apos;D:\example_bookmarks.pdf&apos;;

// 输出图片时的路径
$output_path = &apos;D:\example_bookmarks.jpg&apos;;

// 拼接pdf时，减去上一页页脚的缝隙
$gap = 100;

// 图片四周留白宽度
$padding = 100;

try {
    // 1. 获取 PDF 的总页数
    $imInfo = new \Imagick();
    // 仅读取元数据获取总页数
    $imInfo-&gt;pingImage($pdf_path);
    $total_pages = $imInfo-&gt;getNumberImages();
    $imInfo-&gt;clear();

    if ($total_pages === 0) {
        throw new \Exception(&quot;无法识别 PDF 或文件为空&quot;);
    }

    $processed_images = [];
    $canvas_width = 0;
    $canvas_height = 0;

    // 逐页渲染
    for ($i = 0; $i &lt; $total_pages; $i++) {
        $page = new \Imagick();
        $page-&gt;setResolution(150, 150);

        // 只渲染第 i 页
        $page-&gt;readImage($pdf_path . &apos;[&apos; . $i . &apos;]&apos;);

        // 处理背景色和透明度
        $page-&gt;setImageBackgroundColor(&apos;white&apos;);
        $page-&gt;setImageAlphaChannel(\Imagick::ALPHACHANNEL_REMOVE);
        $page-&gt;mergeImageLayers(\Imagick::LAYERMETHOD_FLATTEN);

        // 转为 JPG 兼容格式
        $page-&gt;setImageFormat(&apos;jpg&apos;);

        // 统计最终画布需要的尺寸
        $canvas_height += $page-&gt;getImageHeight();
        $canvas_width = max($canvas_width, $page-&gt;getImageWidth());

        $processed_images[] = $page;
    }

    // 创建一张能容纳所有页的长图画布
    $canvas = new \Imagick();
    $canvas-&gt;newImage($canvas_width, $canvas_height, &apos;white&apos;);
    $canvas-&gt;setImageFormat(&apos;jpg&apos;);

    // 依次拼接
    $current_y = 0;
    foreach ($processed_images as $single_page) {
        $canvas-&gt;compositeImage($single_page, \Imagick::COMPOSITE_OVER, 0, $current_y);

        // 减去上一页页脚的缝隙
        $current_y += $single_page-&gt;getImageHeight() - $gap;

        // 贴完一页释放一页
        $single_page-&gt;clear();
    }

    // 自动切除整张长图四周的空白（包括底部没填满的部分）
    $canvas-&gt;trimImage(0);

    // 重置偏移，否则导出的 JPG 可能会有黑边或尺寸异常
    $canvas-&gt;setImagePage(0, 0, 0, 0);

    // 重新添加边框
    $canvas-&gt;borderImage(&apos;white&apos;, $padding, $padding);

    // 再加一次合并，更干净
    $canvas-&gt;mergeImageLayers(\Imagick::LAYERMETHOD_FLATTEN);

    // 保存结果
    $canvas-&gt;setImageCompressionQuality(90);
    $canvas-&gt;writeImage($output_path);

    // 彻底释放
    $canvas-&gt;clear();

    echo &quot;成功合并 $total_pages 页 PDF。&quot;;
} catch (\Exception $e) {
    echo &quot;渲染失败: &quot; . $e-&gt;getMessage();
}
```</description><pubDate>Thu, 23 Apr 2026 16:00:34 GMT</pubDate><content:encoded>&lt;h2 id=&quot;需求&quot;&gt;需求&lt;/h2&gt;
&lt;p&gt;最近业务需要，需要在后端生成一张图片报告，思来想去，发现先生成规整的pdf后，再把pdf转成图片会轻松不少。&lt;/p&gt;
&lt;p&gt;目前网上的教程都是每页pdf单独转一张jpg，而需求是所有页面合并成一张图片。&lt;/p&gt;
&lt;p&gt;搜了网上不少教程，都是一页转一张，这次把合并的空白补上&lt;/p&gt;
&lt;h2 id=&quot;准备工作&quot;&gt;准备工作&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;准备一份pdf文件&lt;/li&gt;
&lt;li&gt;安装ImageMagick php扩展&lt;/li&gt;
&lt;li&gt;安装Ghostscript&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;为什么要装Ghostscript？&lt;/strong&gt;
PHP 本身并没有能力阅读 PDF，需借助第三方程序 Ghostscript&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;为什么偏偏Ghostscript，而不是其他第三方工具？&lt;/strong&gt;
ImageMagick 处理 PDF时，默认设置调用的就是 Ghostscript。同理：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;处理 JPG，调用的是 libjpeg。&lt;/li&gt;
&lt;li&gt;处理 PNG，调用的是 libpng。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;ghostscriptlinux版要注意&quot;&gt;Ghostscript(linux版要注意)&lt;/h3&gt;
&lt;p&gt;检查 ImageMagick 的安全策略。找到 &lt;code&gt;/etc/ImageMagick-6/policy.xml&lt;/code&gt; 或 &lt;code&gt;/etc/ImageMagick/policy.xml&lt;/code&gt; 。&lt;/p&gt;
&lt;p&gt;确保放开读写权限&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;xml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;policy&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; domain&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;coder&quot;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; rights&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;none&quot;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; pattern&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;PDF&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;&amp;#x3C;!-- 改为 --&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;policy&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; domain&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;coder&quot;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; rights&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;read|write&quot;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; pattern&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;PDF&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;测试是否生效&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;identify&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; /root/pdf路径.pdf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;改完策略要重启php-fpm服务，注意替换php版本&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;/etc/init.d/php-fpm-84&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; restart&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;实现&quot;&gt;实现&lt;/h2&gt;
&lt;p&gt;处理逻辑：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;把PDF每一页单独生成图片，再把每张图片拼接起来。&lt;/li&gt;
&lt;li&gt;每张图片间隙设置负数，消除pdf页脚的空白。&lt;/li&gt;
&lt;li&gt;把图片四周白边消除，防止最后一页PDF未满的情况下，给图片底部留下大量空白。&lt;/li&gt;
&lt;li&gt;再重新为图片生成白色边框，与背景色融为一体。&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;php&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// pdf路径&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;$pdf_path &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &apos;D:\example_bookmarks.pdf&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 输出图片时的路径&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;$output_path &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &apos;D:\example_bookmarks.jpg&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 拼接pdf时，减去上一页页脚的缝隙&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;$gap &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 100&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 图片四周留白宽度&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;$padding &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 100&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;try&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // 1. 获取 PDF 的总页数&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    $imInfo &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; \Imagick&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // 仅读取元数据获取总页数&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    $imInfo&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;pingImage&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;($pdf_path);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    $total_pages &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; $imInfo&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;getNumberImages&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    $imInfo&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;clear&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; ($total_pages &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        throw&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; \Exception&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;无法识别 PDF 或文件为空&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    $processed_images &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; [];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    $canvas_width &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    $canvas_height &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // 逐页渲染&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; ($i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; $i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; $total_pages; $i&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        $page &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; \Imagick&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        $page&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;setResolution&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;150&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;150&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        // 只渲染第 i 页&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        $page&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;readImage&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;($pdf_path &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &apos;[&apos;&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; .&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; $i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &apos;]&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        // 处理背景色和透明度&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        $page&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;setImageBackgroundColor&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;white&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        $page&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;setImageAlphaChannel&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;\Imagick&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;ALPHACHANNEL_REMOVE&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        $page&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;mergeImageLayers&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;\Imagick&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;LAYERMETHOD_FLATTEN&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        // 转为 JPG 兼容格式&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        $page&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;setImageFormat&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;jpg&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        // 统计最终画布需要的尺寸&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        $canvas_height &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; $page&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;getImageHeight&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        $canvas_width &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; max&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;($canvas_width, $page&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;getImageWidth&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        $processed_images[] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; $page;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // 创建一张能容纳所有页的长图画布&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    $canvas &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; \Imagick&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    $canvas&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;newImage&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;($canvas_width, $canvas_height, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;white&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    $canvas&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;setImageFormat&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;jpg&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // 依次拼接&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    $current_y &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    foreach&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; ($processed_images &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; $single_page) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        $canvas&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;compositeImage&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;($single_page, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;\Imagick&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;COMPOSITE_OVER&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, $current_y);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        // 减去上一页页脚的缝隙&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        $current_y &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; $single_page&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;getImageHeight&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; $gap;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        // 贴完一页释放一页&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        $single_page&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;clear&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // 自动切除整张长图四周的空白（包括底部没填满的部分）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    $canvas&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;trimImage&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // 重置偏移，否则导出的 JPG 可能会有黑边或尺寸异常&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    $canvas&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;setImagePage&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // 重新添加边框&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    $canvas&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;borderImage&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;white&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, $padding, $padding);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // 再加一次合并，更干净&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    $canvas&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;mergeImageLayers&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;\Imagick&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;LAYERMETHOD_FLATTEN&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // 保存结果&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    $canvas&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;setImageCompressionQuality&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;90&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    $canvas&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;writeImage&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;($output_path);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // 彻底释放&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    $canvas&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;clear&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    echo&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;成功合并 &lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;$total_pages&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; 页 PDF。&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;\Exception&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; $e) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    echo&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;渲染失败: &quot;&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; .&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; $e&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;getMessage&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content:encoded><category>PHP</category><category>信息技术</category><category>Ghostscript</category><category>ImageMagick</category><category>JPG</category><category>PDF</category><category>PDF转图片</category><author>Miniwater</author></item><item><title>语言的艺术：一本正经胡说八道</title><link>https://netlify.krjojo.com/%E8%AF%AD%E8%A8%80%E7%9A%84%E8%89%BA%E6%9C%AF%EF%BC%9A%E4%B8%80%E6%9C%AC%E6%AD%A3%E7%BB%8F%E8%83%A1%E8%AF%B4%E5%85%AB%E9%81%93/</link><guid isPermaLink="true">https://netlify.krjojo.com/%E8%AF%AD%E8%A8%80%E7%9A%84%E8%89%BA%E6%9C%AF%EF%BC%9A%E4%B8%80%E6%9C%AC%E6%AD%A3%E7%BB%8F%E8%83%A1%E8%AF%B4%E5%85%AB%E9%81%93/</guid><description>核心在于把话先接住，不能让别人感到冒犯。

给方向，猜测也要说（留后门），下一步动作

## 三步走

给自己一点时间，哪一些是自己做的，哪一些是存疑的，以及汇报过程当中所要的对应资源。

* 先定性
  + 原因、背景
* 留后门
  + 基于目前信息，按假设，如果有变化会更新给大家
* 类比法
  + 就像外卖，我们先保证送达，送达以后再看看好不好吃，我们下一步再看。
  + 就像去医院排队，我们先挂上号，进入排队流程，后面检查我们再下一步看。

### 先定性

不要想着给出完美方案，而是对事情拆分，拆分后先挑了解的先去回答

### 再解释

再解释未来该怎么做，再你不知道或者存疑的（需要跟其他人同事对接的）

### 给下一步

给出下一步走向

## 例子

最近咋样

直接回答“还行”就聊不下去了

```
最近的确有点忙，忙的焦头烂额，我最近在折腾一个新的习惯，我发现对于我而言，最难的不是努力，而是坚持。
```

亲戚问你工资多少

他问你多少钱，你回答能力和成长

```
目前还在成长阶段，我先要把领到交给我的事先做好，其实我核心不是说要挣多少钱，而是不要被行业淘汰。
```

朋友找你帮忙

委婉拒绝

```
我这两天以及排的很满了，那个公司里面的事情也很多，家里事情也很多，真的没办法完全帮你，这样子吧，我可以给你一个思路（模板），你可以按照这种方式，你先做如果遇到问题，你到时候再问我，不过因为最近真的比较忙，我可能回复不太及时。
```

你来说说进度

跳过中间的解释

```
目前到哪里了，目前卡到哪个关键点了，接下来计划怎么解决，需要什么样的资源。
```

你为什么托懒

要的是掌控感，还给他掌控感。只要给他一个解释，解释拖在什么地方，以及未来什么时候完成。

```
这件事情的却比预期慢了，慢的原因有两类，第一个是外部原因，第二个是内部原因，然后下一步计划，外部我已经推进到哪里，预计什么时候完成，内部我现在在调整哪种方式，预计什么时候完成。
```

你什么时候能交付

需要安全感，体验感。不能回答尽快

```
目前我们进度到哪，后续计划两步给到你，先给你什么样的交付内容，然后再升级对应内容
```

## 实战

这一代mate70全部国产吗？所有芯片吗？

如实回答就没办法交差了，所以要避开问题回答目的。

```
我们具备全部国产的能力，所以这一代产品的每一颗芯片都具有这个国产的能力。
```

马化腾，你回答一下，网络后台在你手上还是美国人手上？

面对宗庆刁钻问题，定性“虚假谣言”，解释“犯罪行为”，下一步“加强”

```
过去一年半时间，我们花了大量的精力去处理很多的这种虚假的谣言，第二是能够溯源，能够找到这种恶意分子，事实上这个是已经涉嫌到犯罪行为了，按我们的流程是无条件处理，这个后续我们再加强，希望宗总能够满意。
```

## 注意事项

说任何话都要假想对方在录音

![](./别输在不会表达上.avif)</description><pubDate>Sun, 15 Feb 2026 05:09:08 GMT</pubDate><content:encoded>&lt;p&gt;核心在于把话先接住，不能让别人感到冒犯。&lt;/p&gt;
&lt;p&gt;给方向，猜测也要说（留后门），下一步动作&lt;/p&gt;
&lt;h2 id=&quot;三步走&quot;&gt;三步走&lt;/h2&gt;
&lt;p&gt;给自己一点时间，哪一些是自己做的，哪一些是存疑的，以及汇报过程当中所要的对应资源。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;先定性
&lt;ul&gt;
&lt;li&gt;原因、背景&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;留后门
&lt;ul&gt;
&lt;li&gt;基于目前信息，按假设，如果有变化会更新给大家&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;类比法
&lt;ul&gt;
&lt;li&gt;就像外卖，我们先保证送达，送达以后再看看好不好吃，我们下一步再看。&lt;/li&gt;
&lt;li&gt;就像去医院排队，我们先挂上号，进入排队流程，后面检查我们再下一步看。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;先定性&quot;&gt;先定性&lt;/h3&gt;
&lt;p&gt;不要想着给出完美方案，而是对事情拆分，拆分后先挑了解的先去回答&lt;/p&gt;
&lt;h3 id=&quot;再解释&quot;&gt;再解释&lt;/h3&gt;
&lt;p&gt;再解释未来该怎么做，再你不知道或者存疑的（需要跟其他人同事对接的）&lt;/p&gt;
&lt;h3 id=&quot;给下一步&quot;&gt;给下一步&lt;/h3&gt;
&lt;p&gt;给出下一步走向&lt;/p&gt;
&lt;h2 id=&quot;例子&quot;&gt;例子&lt;/h2&gt;
&lt;p&gt;最近咋样&lt;/p&gt;
&lt;p&gt;直接回答“还行”就聊不下去了&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;最近的确有点忙，忙的焦头烂额，我最近在折腾一个新的习惯，我发现对于我而言，最难的不是努力，而是坚持。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;亲戚问你工资多少&lt;/p&gt;
&lt;p&gt;他问你多少钱，你回答能力和成长&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;目前还在成长阶段，我先要把领到交给我的事先做好，其实我核心不是说要挣多少钱，而是不要被行业淘汰。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;朋友找你帮忙&lt;/p&gt;
&lt;p&gt;委婉拒绝&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;我这两天以及排的很满了，那个公司里面的事情也很多，家里事情也很多，真的没办法完全帮你，这样子吧，我可以给你一个思路（模板），你可以按照这种方式，你先做如果遇到问题，你到时候再问我，不过因为最近真的比较忙，我可能回复不太及时。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;你来说说进度&lt;/p&gt;
&lt;p&gt;跳过中间的解释&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;目前到哪里了，目前卡到哪个关键点了，接下来计划怎么解决，需要什么样的资源。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;你为什么托懒&lt;/p&gt;
&lt;p&gt;要的是掌控感，还给他掌控感。只要给他一个解释，解释拖在什么地方，以及未来什么时候完成。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;这件事情的却比预期慢了，慢的原因有两类，第一个是外部原因，第二个是内部原因，然后下一步计划，外部我已经推进到哪里，预计什么时候完成，内部我现在在调整哪种方式，预计什么时候完成。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;你什么时候能交付&lt;/p&gt;
&lt;p&gt;需要安全感，体验感。不能回答尽快&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;目前我们进度到哪，后续计划两步给到你，先给你什么样的交付内容，然后再升级对应内容&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;实战&quot;&gt;实战&lt;/h2&gt;
&lt;p&gt;这一代mate70全部国产吗？所有芯片吗？&lt;/p&gt;
&lt;p&gt;如实回答就没办法交差了，所以要避开问题回答目的。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;我们具备全部国产的能力，所以这一代产品的每一颗芯片都具有这个国产的能力。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;马化腾，你回答一下，网络后台在你手上还是美国人手上？&lt;/p&gt;
&lt;p&gt;面对宗庆刁钻问题，定性“虚假谣言”，解释“犯罪行为”，下一步“加强”&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;过去一年半时间，我们花了大量的精力去处理很多的这种虚假的谣言，第二是能够溯源，能够找到这种恶意分子，事实上这个是已经涉嫌到犯罪行为了，按我们的流程是无条件处理，这个后续我们再加强，希望宗总能够满意。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;注意事项&quot;&gt;注意事项&lt;/h2&gt;
&lt;p&gt;说任何话都要假想对方在录音&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1353&quot; height=&quot;1380&quot; src=&quot;/_astro/%E5%88%AB%E8%BE%93%E5%9C%A8%E4%B8%8D%E4%BC%9A%E8%A1%A8%E8%BE%BE%E4%B8%8A.CwHge12A_Z1FHWFg.webp&quot; srcset=&quot;&quot;&gt;&lt;/p&gt;</content:encoded><category>生活</category><category>社交</category><category>答非所问</category><category>语言的艺术</category><category>高情商</category><author>Miniwater</author></item><item><title>白嫖阿里云免费PG数据库</title><link>https://netlify.krjojo.com/%E7%99%BD%E5%AB%96%E9%98%BF%E9%87%8C%E4%BA%91%E5%85%8D%E8%B4%B9pg%E6%95%B0%E6%8D%AE%E5%BA%93/</link><guid isPermaLink="true">https://netlify.krjojo.com/%E7%99%BD%E5%AB%96%E9%98%BF%E9%87%8C%E4%BA%91%E5%85%8D%E8%B4%B9pg%E6%95%B0%E6%8D%AE%E5%BA%93/</guid><description>去年年底，阿里云悄咪咪上线了一个 Supabase 平台，最吸引人的就是`阿里云原生数据仓库 AnalyticDB PostgreSQL版` 下多了免费的1核2G PostgreSQL 数据库。

当然，每人只能创建一台。

![](./后台.avif)

介绍也一如既往鸡贼，跟ESA免费版一样，注明了仅用于开发测试。信他就是对羊毛党的不尊重，薅它就完事了。

![](./费用说明.avif)

## 创建免费测试

打开：&lt;https://gpdbnext.console.aliyun.com/gpdb/cn-hangzhou/supabase&gt;

![](./image.avif)

注意要选择地区，首批 Supabase PostgreSQL 支持的地区不全，比如就没有广州地区，无伤大雅，直接离服务器最近的。

![](./image.png)

一般来说，如果没有杭州地区的阿里云服务器，**专有网络**和**专有网络交换机**是空的，需要去[阿里云VPC控制台](https://vpc.console.aliyun.com/vpc/cn-hangzhou/vpcs)创建，要记住这里的**可用区**（杭州 可用区J）。

![](./image-1.avif)

创建专有网络，可用区要与上方一样

![](./QQ_1768283510171.avif)

回到创建项目，就可以看到专有网络存在了，ip白名单填写自己服务器IP。

![](./QQ_1768283694194.avif)

如果服务器也是在同一个专有网络里，就可以走内网连接，速度非常块。

也可以不设白名单，直接0.0.0.0暴露公网，给其他不确定IP的服务使用，如Vercel、Dokploy...

## 1panel添加远程服务器

![](./image-1.png)

![](./image-2.png)

用户名默认是：postgres

数据库地址填外网连接地址，可以在阿里云Supabase PostgreSQL 基本信息里查看。

```
项目ID.supabase.opentrust.net
```

![](./QQ_1768284353426.avif)

## 性能测试

毕竟是免费，公网连接，网络物理延迟是性能的瓶颈，Debuff叠满了，测试仅供图一乐。

* 测试软件：pgbench
* 连接方式：公网
* 地区：深圳-&gt;广州

### 标准压力测试

* 10 个并发连接
* 2 个线程
* 30 秒
* 5 秒 报告一次

```
pgbench -h spb-*.supabase.opentrust.net -p 5432 -U postgres -c 10 -j 2 -T 30 -P 5 test
Password:

pgbench (18.1, server 15.8)
starting vacuum...end.
progress: 5.0 s, 38.4 tps, lat 233.286 ms stddev 95.465, 0 failed
progress: 10.0 s, 42.2 tps, lat 236.762 ms stddev 56.552, 0 failed
progress: 15.0 s, 42.4 tps, lat 236.857 ms stddev 48.884, 0 failed
progress: 20.0 s, 42.4 tps, lat 235.358 ms stddev 52.196, 0 failed
progress: 25.0 s, 42.4 tps, lat 236.359 ms stddev 49.955, 0 failed
progress: 30.0 s, 42.4 tps, lat 235.453 ms stddev 41.865, 0 failed
transaction type: &lt;builtin: TPC-B (sort of)&gt;
scaling factor: 1
query mode: simple
number of clients: 10
number of threads: 2
maximum number of tries: 1
duration: 30 s
number of transactions actually processed: 1261
number of failed transactions: 0 (0.000%)
latency average = 235.723 ms
latency stddev = 59.334 ms
initial connection time = 398.050 ms
tps = 42.248489 (without initial connection time)
```

如果是公网链接，并不适合做读写频繁的业务，42 TPS拉到裤子里了。

### 只读模式

* 20 个并发连接
* 30 秒

```
pgbench -h spb-*.supabase.opentrust.net -p 5432 -U postgres -S -c 20 -T 30 test
Password:

pgbench (18.1, server 15.8)
starting vacuum...end.
transaction type: &lt;builtin: select only&gt;
scaling factor: 1
query mode: simple
number of clients: 20
number of threads: 1
maximum number of tries: 1
duration: 30 s
number of transactions actually processed: 51865
number of failed transactions: 0 (0.000%)
latency average = 10.917 ms
initial connection time = 1715.783 ms
tps = 1832.048180 (without initial connection time)
```

只读性能倒是非常优秀，适合SQL轻写入的项目。

## 总结

目前，该免费版本目前 **没有试用时长或次数限制** ，但阿里云保留未来调整免费策略的权利，并会通过公告等方式提前通知。

且用且珍惜吧。</description><pubDate>Tue, 13 Jan 2026 07:35:54 GMT</pubDate><content:encoded>&lt;p&gt;去年年底，阿里云悄咪咪上线了一个 Supabase 平台，最吸引人的就是&lt;code&gt;阿里云原生数据仓库 AnalyticDB PostgreSQL版&lt;/code&gt; 下多了免费的1核2G PostgreSQL 数据库。&lt;/p&gt;
&lt;p&gt;当然，每人只能创建一台。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2622&quot; height=&quot;485&quot; src=&quot;/_astro/%E5%90%8E%E5%8F%B0.BTotLB3j_2befo1.webp&quot; srcset=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;介绍也一如既往鸡贼，跟ESA免费版一样，注明了仅用于开发测试。信他就是对羊毛党的不尊重，薅它就完事了。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1343&quot; height=&quot;297&quot; src=&quot;/_astro/%E8%B4%B9%E7%94%A8%E8%AF%B4%E6%98%8E.CmSiAjhx_1P6XII.webp&quot; srcset=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;创建免费测试&quot;&gt;创建免费测试&lt;/h2&gt;
&lt;p&gt;打开：&lt;a href=&quot;https://gpdbnext.console.aliyun.com/gpdb/cn-hangzhou/supabase&quot;&gt;https://gpdbnext.console.aliyun.com/gpdb/cn-hangzhou/supabase&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;858&quot; height=&quot;472&quot; src=&quot;/_astro/image.B1tqIVsZ_1j9fig.webp&quot; srcset=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;注意要选择地区，首批 Supabase PostgreSQL 支持的地区不全，比如就没有广州地区，无伤大雅，直接离服务器最近的。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1051&quot; height=&quot;991&quot; src=&quot;/_astro/image.CAM1jaqb_1HswMm.webp&quot; srcset=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;一般来说，如果没有杭州地区的阿里云服务器，&lt;strong&gt;专有网络&lt;/strong&gt;和&lt;strong&gt;专有网络交换机&lt;/strong&gt;是空的，需要去&lt;a href=&quot;https://vpc.console.aliyun.com/vpc/cn-hangzhou/vpcs&quot;&gt;阿里云VPC控制台&lt;/a&gt;创建，要记住这里的&lt;strong&gt;可用区&lt;/strong&gt;（杭州 可用区J）。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;937&quot; height=&quot;875&quot; src=&quot;/_astro/image-1.CL_1qg12_Z1QQ5mw.webp&quot; srcset=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;创建专有网络，可用区要与上方一样&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1790&quot; height=&quot;1827&quot; src=&quot;/_astro/QQ_1768283510171.BIkspz3r_Z22Mejr.webp&quot; srcset=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;回到创建项目，就可以看到专有网络存在了，ip白名单填写自己服务器IP。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;873&quot; height=&quot;1044&quot; src=&quot;/_astro/QQ_1768283694194.BcLMCTCK_o2YL0.webp&quot; srcset=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;如果服务器也是在同一个专有网络里，就可以走内网连接，速度非常块。&lt;/p&gt;
&lt;p&gt;也可以不设白名单，直接0.0.0.0暴露公网，给其他不确定IP的服务使用，如Vercel、Dokploy…&lt;/p&gt;
&lt;h2 id=&quot;1panel添加远程服务器&quot;&gt;1panel添加远程服务器&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1417&quot; height=&quot;568&quot; src=&quot;/_astro/image-1.B_DhRMId_FCs9J.webp&quot; srcset=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2061&quot; height=&quot;1359&quot; src=&quot;/_astro/image-2.BZiMmz0m_ZqwWve.webp&quot; srcset=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;用户名默认是：postgres&lt;/p&gt;
&lt;p&gt;数据库地址填外网连接地址，可以在阿里云Supabase PostgreSQL 基本信息里查看。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;项目ID.supabase.opentrust.net&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1290&quot; height=&quot;647&quot; src=&quot;/_astro/QQ_1768284353426.kE9ywIf4_ZhBY6n.webp&quot; srcset=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;性能测试&quot;&gt;性能测试&lt;/h2&gt;
&lt;p&gt;毕竟是免费，公网连接，网络物理延迟是性能的瓶颈，Debuff叠满了，测试仅供图一乐。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;测试软件：pgbench&lt;/li&gt;
&lt;li&gt;连接方式：公网&lt;/li&gt;
&lt;li&gt;地区：深圳-&gt;广州&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;标准压力测试&quot;&gt;标准压力测试&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;10 个并发连接&lt;/li&gt;
&lt;li&gt;2 个线程&lt;/li&gt;
&lt;li&gt;30 秒&lt;/li&gt;
&lt;li&gt;5 秒 报告一次&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;pgbench -h spb-*.supabase.opentrust.net -p 5432 -U postgres -c 10 -j 2 -T 30 -P 5 test&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Password:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;pgbench (18.1, server 15.8)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;starting vacuum...end.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;progress: 5.0 s, 38.4 tps, lat 233.286 ms stddev 95.465, 0 failed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;progress: 10.0 s, 42.2 tps, lat 236.762 ms stddev 56.552, 0 failed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;progress: 15.0 s, 42.4 tps, lat 236.857 ms stddev 48.884, 0 failed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;progress: 20.0 s, 42.4 tps, lat 235.358 ms stddev 52.196, 0 failed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;progress: 25.0 s, 42.4 tps, lat 236.359 ms stddev 49.955, 0 failed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;progress: 30.0 s, 42.4 tps, lat 235.453 ms stddev 41.865, 0 failed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;transaction type: &amp;#x3C;builtin: TPC-B (sort of)&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;scaling factor: 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;query mode: simple&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;number of clients: 10&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;number of threads: 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;maximum number of tries: 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;duration: 30 s&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;number of transactions actually processed: 1261&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;number of failed transactions: 0 (0.000%)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;latency average = 235.723 ms&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;latency stddev = 59.334 ms&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;initial connection time = 398.050 ms&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;tps = 42.248489 (without initial connection time)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果是公网链接，并不适合做读写频繁的业务，42 TPS拉到裤子里了。&lt;/p&gt;
&lt;h3 id=&quot;只读模式&quot;&gt;只读模式&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;20 个并发连接&lt;/li&gt;
&lt;li&gt;30 秒&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;pgbench -h spb-*.supabase.opentrust.net -p 5432 -U postgres -S -c 20 -T 30 test&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Password:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;pgbench (18.1, server 15.8)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;starting vacuum...end.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;transaction type: &amp;#x3C;builtin: select only&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;scaling factor: 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;query mode: simple&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;number of clients: 20&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;number of threads: 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;maximum number of tries: 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;duration: 30 s&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;number of transactions actually processed: 51865&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;number of failed transactions: 0 (0.000%)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;latency average = 10.917 ms&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;initial connection time = 1715.783 ms&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;tps = 1832.048180 (without initial connection time)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;只读性能倒是非常优秀，适合SQL轻写入的项目。&lt;/p&gt;
&lt;h2 id=&quot;总结&quot;&gt;总结&lt;/h2&gt;
&lt;p&gt;目前，该免费版本目前 &lt;strong&gt;没有试用时长或次数限制&lt;/strong&gt; ，但阿里云保留未来调整免费策略的权利，并会通过公告等方式提前通知。&lt;/p&gt;
&lt;p&gt;且用且珍惜吧。&lt;/p&gt;</content:encoded><category>云服务</category><category>阿里云</category><category>PostgreSQL</category><category>免费</category><category>数据库</category><category>白嫖</category><author>Miniwater</author></item><item><title>上手：五块钱的目村眼镜</title><link>https://netlify.krjojo.com/%E4%B8%8A%E6%89%8B%EF%BC%9A%E7%9B%AE%E6%9D%91%E7%9A%84%E4%BA%94%E5%9D%97%E9%92%B1%E7%9C%BC%E9%95%9C/</link><guid isPermaLink="true">https://netlify.krjojo.com/%E4%B8%8A%E6%89%8B%EF%BC%9A%E7%9B%AE%E6%9D%91%E7%9A%84%E4%BA%94%E5%9D%97%E9%92%B1%E7%9C%BC%E9%95%9C/</guid><description>## 前因

上上周在抖音刷到了四块八配眼镜，价格给我惊呆了，门店正好在商业街附近，叫上近视的朋友一起探店。

![](./抖音.avif)

四分之一奶茶钱

![](./详情.avif)

还包含验光

到了门店，在规定区域挑一副镜框，然后排队拿号验光就可以离开了，眼镜做好后微信会收到通知。

这个套餐的镜框都是没有鼻托的。（理论上可以拿自己旧眼镜的镜框去配，想起家里还有个钛金属镜框）

参与活动的人挺多，等眼镜做好已经是四天后了。

## 到手

![](./到手.avif)

全家福

一瓶未知成分的清洁剂，眼镜盒，眼镜布，眼镜本体

没有鼻托的眼镜

（其实还给了礼品袋装起来，懒得拍了）

![](./新眼镜.avif)

## 测试

我是左平视，右50近视+50散光。

![](./近视.avif)

近视的自我检测

1. 近视眼患者看到的图是个戴眼镜，齐耳短发的女人。
2. 非近视眼患者看到的则只是竖条，视力好的还可以看出阴影。

![](./散光.webp)

散光的自我检测

1. 分别用左右裸眼观看上图；
2. 保持手机与眼睛同高，从远到近移动手机，直达刚好可以看清图中线条，保持此位置；
3. 双眼分别分辨图中虚线的粗细、深浅。

**分析：**

* 若看到所有虚线均匀分布，没有特别的深浅、长短之分，则基本没有散光现象；
* 若看到某条虚线特别黑亮，与其他虚线明显有区别，说明眼睛有一定程度散光，且改方向的位置则是被测者的**散光轴位**。

不放心，又尝试了一下[蔡司在线视力筛选检查](https://www.zeiss.com.cn/vision-care/eye-health-and-care/zeiss-online-vision-screening-check.html)。

近视的右眼一切正常，反而把平时的左眼轻微散光测出来了。

![](./散光.avif)

## 体验

这眼镜戴了两天，不知道是不是没习惯过来，还是说第一次戴厚边框的眼镜，还是说镜框太重没鼻托，戴久了会有一点酸胀感。

然后带起来会偏色，像是套了一层黄色滤镜，不过我看网上说老款防蓝光滤镜都会偏黄色，应该是正常吧。

看来五块钱的羊毛不好薅啊，又戴回旧眼镜了。</description><pubDate>Mon, 05 Jan 2026 12:55:16 GMT</pubDate><content:encoded>&lt;h2 id=&quot;前因&quot;&gt;前因&lt;/h2&gt;
&lt;p&gt;上上周在抖音刷到了四块八配眼镜，价格给我惊呆了，门店正好在商业街附近，叫上近视的朋友一起探店。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1206&quot; height=&quot;2622&quot; src=&quot;/_astro/%E6%8A%96%E9%9F%B3.Cqgr4SLu_1v4Xxd.webp&quot; srcset=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;四分之一奶茶钱&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1206&quot; height=&quot;2622&quot; src=&quot;/_astro/%E8%AF%A6%E6%83%85.w1vl1vSd_Ztqq5C.webp&quot; srcset=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;还包含验光&lt;/p&gt;
&lt;p&gt;到了门店，在规定区域挑一副镜框，然后排队拿号验光就可以离开了，眼镜做好后微信会收到通知。&lt;/p&gt;
&lt;p&gt;这个套餐的镜框都是没有鼻托的。（理论上可以拿自己旧眼镜的镜框去配，想起家里还有个钛金属镜框）&lt;/p&gt;
&lt;p&gt;参与活动的人挺多，等眼镜做好已经是四天后了。&lt;/p&gt;
&lt;h2 id=&quot;到手&quot;&gt;到手&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;4032&quot; height=&quot;3024&quot; src=&quot;/_astro/%E5%88%B0%E6%89%8B.Ds7q4VdT_MpWYM.webp&quot; srcset=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;全家福&lt;/p&gt;
&lt;p&gt;一瓶未知成分的清洁剂，眼镜盒，眼镜布，眼镜本体&lt;/p&gt;
&lt;p&gt;没有鼻托的眼镜&lt;/p&gt;
&lt;p&gt;（其实还给了礼品袋装起来，懒得拍了）&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1702&quot; height=&quot;1276&quot; src=&quot;/_astro/%E6%96%B0%E7%9C%BC%E9%95%9C.BktDYAdf_blT3U.webp&quot; srcset=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;测试&quot;&gt;测试&lt;/h2&gt;
&lt;p&gt;我是左平视，右50近视+50散光。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;318&quot; height=&quot;327&quot; src=&quot;/_astro/%E8%BF%91%E8%A7%86.B8KF7Nlb_Z1kwlAY.webp&quot; srcset=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;近视的自我检测&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;近视眼患者看到的图是个戴眼镜，齐耳短发的女人。&lt;/li&gt;
&lt;li&gt;非近视眼患者看到的则只是竖条，视力好的还可以看出阴影。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;519&quot; height=&quot;459&quot; src=&quot;/_astro/%E6%95%A3%E5%85%89.BEC7h3Ao_ZPGynp.webp&quot; srcset=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;散光的自我检测&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;分别用左右裸眼观看上图；&lt;/li&gt;
&lt;li&gt;保持手机与眼睛同高，从远到近移动手机，直达刚好可以看清图中线条，保持此位置；&lt;/li&gt;
&lt;li&gt;双眼分别分辨图中虚线的粗细、深浅。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;分析：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;若看到所有虚线均匀分布，没有特别的深浅、长短之分，则基本没有散光现象；&lt;/li&gt;
&lt;li&gt;若看到某条虚线特别黑亮，与其他虚线明显有区别，说明眼睛有一定程度散光，且改方向的位置则是被测者的&lt;strong&gt;散光轴位&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;不放心，又尝试了一下&lt;a href=&quot;https://www.zeiss.com.cn/vision-care/eye-health-and-care/zeiss-online-vision-screening-check.html&quot;&gt;蔡司在线视力筛选检查&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;近视的右眼一切正常，反而把平时的左眼轻微散光测出来了。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1155&quot; height=&quot;1269&quot; src=&quot;/_astro/%E6%95%A3%E5%85%89.BuU7ApGj_ZDTgaW.webp&quot; srcset=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;体验&quot;&gt;体验&lt;/h2&gt;
&lt;p&gt;这眼镜戴了两天，不知道是不是没习惯过来，还是说第一次戴厚边框的眼镜，还是说镜框太重没鼻托，戴久了会有一点酸胀感。&lt;/p&gt;
&lt;p&gt;然后带起来会偏色，像是套了一层黄色滤镜，不过我看网上说老款防蓝光滤镜都会偏黄色，应该是正常吧。&lt;/p&gt;
&lt;p&gt;看来五块钱的羊毛不好薅啊，又戴回旧眼镜了。&lt;/p&gt;</content:encoded><category>日记</category><category>生活</category><category>散光</category><category>眼镜</category><category>薅羊毛</category><category>近视</category><category>配眼镜</category><author>Miniwater</author></item><item><title>转载：MEOW MEOW?</title><link>https://netlify.krjojo.com/%E8%BD%AC%E8%BD%BD%EF%BC%9Ameow-meow/</link><guid isPermaLink="true">https://netlify.krjojo.com/%E8%BD%AC%E8%BD%BD%EF%BC%9Ameow-meow/</guid><description>Meow meow meow meow meow meow meow meow meow meow, meow meow meow meow meow meow. Meow meow meow meow, meow meow meow meow meow meow meow meow meow meow meow meow. Meow meow meow meow meow meow meow meow meow meow meow meow meow meow. Meow meow meow meow meow meow.

Meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow .

&gt; &quot;*Meow meow meow, meow meow meow meow! Meow meow meow meow meow meow meow meow.* &quot;
&gt;
&gt; Meow.

Meow meow meow, meow meow meow meow! Meow meow meow meow meow meow meow meow. Meow meow meow meow meow meow meow meow meow meow meow meow meow.

Meow meow meow, meow meow meow.

&quot;Meow meow meow meow meow, meow. Meow meow meow meow. Meow? Meow.&quot;

![](./Meow.avif)

Meow meow meow**.**

Meow meow meow meow meow meow.

- Meow

Meow meow meow meow meow meow meow, meow meow meow. Meow meow meow meow meow meow, meow meow, meow. Meow meow.

Meow meow, meow meow meow meow meow meow meow meow meow meow. Meow, meow meow meow meow. Meow meow meow meow meow meow meow, meow meow meow meow meow meow meow.

Meow meow meow meow meow. Meow meow. Meow meow meow meow meow meow.</description><pubDate>Wed, 31 Dec 2025 04:16:24 GMT</pubDate><content:encoded>&lt;p&gt;Meow meow meow meow meow meow meow meow meow meow, meow meow meow meow meow meow. Meow meow meow meow, meow meow meow meow meow meow meow meow meow meow meow meow. Meow meow meow meow meow meow meow meow meow meow meow meow meow meow. Meow meow meow meow meow meow.&lt;/p&gt;
&lt;p&gt;Meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow meow .&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“&lt;em&gt;Meow meow meow, meow meow meow meow! Meow meow meow meow meow meow meow meow.&lt;/em&gt; ”&lt;/p&gt;
&lt;p&gt;Meow.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Meow meow meow, meow meow meow meow! Meow meow meow meow meow meow meow meow. Meow meow meow meow meow meow meow meow meow meow meow meow meow.&lt;/p&gt;
&lt;p&gt;Meow meow meow, meow meow meow.&lt;/p&gt;
&lt;p&gt;“Meow meow meow meow meow, meow. Meow meow meow meow. Meow? Meow.”&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;338&quot; height=&quot;522&quot; src=&quot;/_astro/Meow.CckpDSK6_Z1yG0BG.webp&quot; srcset=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;Meow meow meow**.**&lt;/p&gt;
&lt;p&gt;Meow meow meow meow meow meow.&lt;/p&gt;
&lt;p&gt;- Meow&lt;/p&gt;
&lt;p&gt;Meow meow meow meow meow meow meow, meow meow meow. Meow meow meow meow meow meow, meow meow, meow. Meow meow.&lt;/p&gt;
&lt;p&gt;Meow meow, meow meow meow meow meow meow meow meow meow meow. Meow, meow meow meow meow. Meow meow meow meow meow meow meow, meow meow meow meow meow meow meow.&lt;/p&gt;
&lt;p&gt;Meow meow meow meow meow. Meow meow. Meow meow meow meow meow meow.&lt;/p&gt;</content:encoded><category>学习</category><category>阅读</category><category>Meow</category><author>Miniwater</author></item><item><title>2025 年度AI工具推荐 包含链接地址</title><link>https://netlify.krjojo.com/2025-%E5%B9%B4%E5%BA%A6ai%E5%B7%A5%E5%85%B7%E6%8E%A8%E8%8D%90-%E5%8C%85%E5%90%AB%E9%93%BE%E6%8E%A5%E5%9C%B0%E5%9D%80/</link><guid isPermaLink="true">https://netlify.krjojo.com/2025-%E5%B9%B4%E5%BA%A6ai%E5%B7%A5%E5%85%B7%E6%8E%A8%E8%8D%90-%E5%8C%85%E5%90%AB%E9%93%BE%E6%8E%A5%E5%9C%B0%E5%9D%80/</guid><description>收集整理全网：年度最好用AI工具 - 2025年12月。

## 省流总结

预算够首选用Google全家桶，便宜平替用字节全家桶，免费开源用阿里全家桶。

其中，[奥特曼全家桶](https://openai.com/)和谷歌全家桶差不多，目前谷歌全家桶略略略胜一筹。

以字节即梦为例，这是用文章标题生成视频的效果：

[](https://www.krjojo.com/wp-content/uploads/2025/12/jimeng-2025-12-26-4112-AI大脑图标缓慢旋转并发出脉冲光效，数据流线条轻柔流动。各个AI工具图标轻微浮动.mp4)

即梦AI

## 完整版

| 领域 | 首选 | 平替 | 开源 |
| --- | --- | --- | --- |
| 文本 | [Gemini 3.0 Pro](https://gemini.google.com/app) | [豆包](https://www.doubao.com/chat/) | [千问](https://huggingface.co/Qwen) |
| 图像 | [Nano Banana Pro](https://gemini.google/tw/overview/image-generation/) | [Seedream 4.5](https://jimeng.jianying.com/ai-tool/home/?type=image) | [Z-Image](https://github.com/Tongyi-MAI/Z-Image) |
| 视频 | [Veo 3.1](https://gemini.google/overview/video-generation/) | [Seedance 1.5 pro](https://jimeng.jianying.com/ai-tool/home?type=video) | [万](https://github.com/Wan-Video/Wan2.2)[相](https://github.com/Wan-Video/Wan2.2) |
| 音频（配音） | [MiniMax Speech 2.6](https://www.minimaxi.com/audio) | - | [Index TTS 2](https://github.com/index-tts/index-tts) |
| 音频（音乐） | [Suno](https://suno.com/home) [Udio](https://www.udio.com/)（局部调整） [Stable Audio](https://stableaudio.com/)（纯音乐） | - | - |
| 数字人 | [HeyGen](https://www.heygen.com/) | （直接图生视频） | [Infinite Talk](https://github.com/MeiGen-AI/InfiniteTalk) |
| 浏览器 | [夸克](https://www.quark.cn/) | - | - |
| 编程 | [Cursor](https://cursor.com/) | [Trae](https://www.trae.cn/) | - |
| 知识库 | [notebookLM](https://notebooklm.google.com/) | [IMA](https://ima.qq.com/) | - |
| Agent | [Codex](https://openai.com/zh-Hans-CN/codex/) | [扣子空间](https://www.coze.cn/) | [Auto GLM](https://github.com/zai-org/Open-AutoGLM)（安卓） |
| Agent（工作流） | [n8n](https://n8n.io/) | - | [n8n](https://github.com/n8n-io/n8n) |

&gt; 参考：[秋芝2046](https://space.bilibili.com/385670211)</description><pubDate>Fri, 26 Dec 2025 14:40:23 GMT</pubDate><content:encoded>&lt;p&gt;收集整理全网：年度最好用AI工具 - 2025年12月。&lt;/p&gt;
&lt;h2 id=&quot;省流总结&quot;&gt;省流总结&lt;/h2&gt;
&lt;p&gt;预算够首选用Google全家桶，便宜平替用字节全家桶，免费开源用阿里全家桶。&lt;/p&gt;
&lt;p&gt;其中，&lt;a href=&quot;https://openai.com/&quot;&gt;奥特曼全家桶&lt;/a&gt;和谷歌全家桶差不多，目前谷歌全家桶略略略胜一筹。&lt;/p&gt;
&lt;p&gt;以字节即梦为例，这是用文章标题生成视频的效果：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.krjojo.com/wp-content/uploads/2025/12/jimeng-2025-12-26-4112-AI%E5%A4%A7%E8%84%91%E5%9B%BE%E6%A0%87%E7%BC%93%E6%85%A2%E6%97%8B%E8%BD%AC%E5%B9%B6%E5%8F%91%E5%87%BA%E8%84%89%E5%86%B2%E5%85%89%E6%95%88%EF%BC%8C%E6%95%B0%E6%8D%AE%E6%B5%81%E7%BA%BF%E6%9D%A1%E8%BD%BB%E6%9F%94%E6%B5%81%E5%8A%A8%E3%80%82%E5%90%84%E4%B8%AAAI%E5%B7%A5%E5%85%B7%E5%9B%BE%E6%A0%87%E8%BD%BB%E5%BE%AE%E6%B5%AE%E5%8A%A8.mp4&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;即梦AI&lt;/p&gt;
&lt;h2 id=&quot;完整版&quot;&gt;完整版&lt;/h2&gt;













































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;领域&lt;/th&gt;&lt;th&gt;首选&lt;/th&gt;&lt;th&gt;平替&lt;/th&gt;&lt;th&gt;开源&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;文本&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://gemini.google.com/app&quot;&gt;Gemini 3.0 Pro&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://www.doubao.com/chat/&quot;&gt;豆包&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://huggingface.co/Qwen&quot;&gt;千问&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;图像&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://gemini.google/tw/overview/image-generation/&quot;&gt;Nano Banana Pro&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://jimeng.jianying.com/ai-tool/home/?type=image&quot;&gt;Seedream 4.5&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/Tongyi-MAI/Z-Image&quot;&gt;Z-Image&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;视频&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://gemini.google/overview/video-generation/&quot;&gt;Veo 3.1&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://jimeng.jianying.com/ai-tool/home?type=video&quot;&gt;Seedance 1.5 pro&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/Wan-Video/Wan2.2&quot;&gt;万&lt;/a&gt;&lt;a href=&quot;https://github.com/Wan-Video/Wan2.2&quot;&gt;相&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;音频（配音）&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://www.minimaxi.com/audio&quot;&gt;MiniMax Speech 2.6&lt;/a&gt;&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/index-tts/index-tts&quot;&gt;Index TTS 2&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;音频（音乐）&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://suno.com/home&quot;&gt;Suno&lt;/a&gt; &lt;a href=&quot;https://www.udio.com/&quot;&gt;Udio&lt;/a&gt;（局部调整） &lt;a href=&quot;https://stableaudio.com/&quot;&gt;Stable Audio&lt;/a&gt;（纯音乐）&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;数字人&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://www.heygen.com/&quot;&gt;HeyGen&lt;/a&gt;&lt;/td&gt;&lt;td&gt;（直接图生视频）&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/MeiGen-AI/InfiniteTalk&quot;&gt;Infinite Talk&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;浏览器&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://www.quark.cn/&quot;&gt;夸克&lt;/a&gt;&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;编程&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://cursor.com/&quot;&gt;Cursor&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://www.trae.cn/&quot;&gt;Trae&lt;/a&gt;&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;知识库&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://notebooklm.google.com/&quot;&gt;notebookLM&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://ima.qq.com/&quot;&gt;IMA&lt;/a&gt;&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Agent&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://openai.com/zh-Hans-CN/codex/&quot;&gt;Codex&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://www.coze.cn/&quot;&gt;扣子空间&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/zai-org/Open-AutoGLM&quot;&gt;Auto GLM&lt;/a&gt;（安卓）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Agent（工作流）&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://n8n.io/&quot;&gt;n8n&lt;/a&gt;&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/n8n-io/n8n&quot;&gt;n8n&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;参考：&lt;a href=&quot;https://space.bilibili.com/385670211&quot;&gt;秋芝2046&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded><category>AI</category><category>信息技术</category><category>2025</category><category>Agent</category><category>LLM</category><category>人工智能</category><category>年度</category><author>Miniwater</author></item><item><title>如何识别哪些是 AI 生成的内容</title><link>https://netlify.krjojo.com/%E5%A6%82%E4%BD%95%E8%AF%86%E5%88%AB%E5%93%AA%E4%BA%9B%E6%98%AF-ai-%E7%94%9F%E6%88%90%E7%9A%84%E5%86%85%E5%AE%B9/</link><guid isPermaLink="true">https://netlify.krjojo.com/%E5%A6%82%E4%BD%95%E8%AF%86%E5%88%AB%E5%93%AA%E4%BA%9B%E6%98%AF-ai-%E7%94%9F%E6%88%90%E7%9A%84%E5%86%85%E5%AE%B9/</guid><description>最近看到不少朋友用上了AI写作，

几秒一篇万字长文，一天更新好几篇，同时操作数个账号，然后跑来问，为什么搜索引擎不收录？

我？？？

## 简介

老早就想吹一下这话题了，现在AI使用率越来越高，到处充斥大量AI生成的内容，这些内容往往有一个特点，内容质量特别低。

看多会有一种奇怪感，像是工业化，流水线出来。结构充满公式化，甚至有点正的发邪，也就是俗称的AI味。

正常人谁会这么写。

**读者反感，作者喜欢**

毕竟

&gt; 我有什么不懂难道我不会问AI吗，需要来看你生成的？

![](./ai.avif)

## 特征

逛了几圈知乎，收集了目前常见的AI写作痕迹的特征，

可以作为参考。

### 标准化

内容常常会有一种“滴水不漏”的完美感。

不管从文章哪一句开始读，读起来都是非常顺口。

用词规范、句式严谨，语法完美，甚至标点都一丝不苟。

现实中，这种过度标准，一般只会出现在正式场合和文件里。同理，如果拿新闻通稿、单位行政通知去做AI查重，基本也报`疑似ai生成`的提示。

### 中立客观

AI公司在设计大语言模型的时候，为了确保AI生成的内容“安全”和“无害”，AI通常被设定为保持中立、客观的立场。

与人类基于理解和情感写作不同，AI写作本质上是一场概率游戏。

每当AI要选择下一个词时，它会计算所有可能词汇的概率分布，然后选择最“安全”的那一个。

它会避免强烈的个人观点和情感色彩，更不会有讽刺、自嘲或幽默感。

### 语法过多

在学生时代英语作文中，为了凑字数和拿高分，学生常常需要给普通的句子套用大量语法。

如今AI也特别喜欢这样写，时光倒流，轮到你化身当年阅卷老师，看看“学生”刻意“凑语法”写出来是什么效果。

内容中大量使用

* 以……
* 首先……其次……最后……
* 不仅…还能…甚至…
* 总而言之……
* ……

### 毫无深度

内容有一种面面俱到却浅尝辄止的感觉。

喜欢罗列许多要点，但很少深入展开，更不会提出尖锐或原创的观点。

看完后你会发现文章没有任何重点，完全不知道讲了什么。

这种“正确的废话”背后，也是AI为了避免出错和争议，选择重复大众共识的策略。

## 去除AI味

最常见就是用`AI`给`AI内容`去`AI味`。

真是离谱他妈给离谱开门，离谱到家了

常见去味提示词~

```
将所有的句子过渡词和连接词替换为最基础、最常用的词语。尽量使用简单、直接的表达方式，避免使用复杂或生僻的词汇，确保句子之间的逻辑关系清晰，删掉文末总结的部分。
```

常见润色提示词~

```
将以上文字重新修改，写作风格界于书面学术写作和口语描述之间，保证所有的句子都要有主语，不要用复杂的长难句，尽量用短句输出，替换掉所有的非日常词汇。
```

## 检测方法

目前主流的检测方法是用AIGC检测，也就是AI查重。

甚至可以用论文查重，毕竟论文是AI生成的重灾区，支持论文查重的网站基本都支持Ai查重。

分享两个可以免费的AIGC检测，可以检测小文本

* 人民日报：&lt;https://aigcx.people.cn/AIGC-X&gt;（**推荐**）
* zerogpt：&lt;https://www.zerogpt.com/&gt;
* 天眼：&lt;https://www.tianyanai.org/&gt; （补充）

不过建议还是相信自己的第六感，代入一下自己在什么精神状态下才能写出这样的内容

## 总结

最后，引用网友的一句话

&gt; 规范、严谨不对，随意的、肤浅的、乱七八糟狗屁不通的才是人写的。反智时代，要用反智的标准来衡量事物。

不知道未来发展会如何，正所谓强者不会抱怨环境，适应很难，但打不过就加入却很简单。</description><pubDate>Thu, 18 Dec 2025 02:21:30 GMT</pubDate><content:encoded>&lt;p&gt;最近看到不少朋友用上了AI写作，&lt;/p&gt;
&lt;p&gt;几秒一篇万字长文，一天更新好几篇，同时操作数个账号，然后跑来问，为什么搜索引擎不收录？&lt;/p&gt;
&lt;p&gt;我？？？&lt;/p&gt;
&lt;h2 id=&quot;简介&quot;&gt;简介&lt;/h2&gt;
&lt;p&gt;老早就想吹一下这话题了，现在AI使用率越来越高，到处充斥大量AI生成的内容，这些内容往往有一个特点，内容质量特别低。&lt;/p&gt;
&lt;p&gt;看多会有一种奇怪感，像是工业化，流水线出来。结构充满公式化，甚至有点正的发邪，也就是俗称的AI味。&lt;/p&gt;
&lt;p&gt;正常人谁会这么写。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;读者反感，作者喜欢&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;毕竟&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我有什么不懂难道我不会问AI吗，需要来看你生成的？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1280&quot; height=&quot;1712&quot; src=&quot;/_astro/ai.BDM4GBr1_Z2s0Hej.webp&quot; srcset=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;特征&quot;&gt;特征&lt;/h2&gt;
&lt;p&gt;逛了几圈知乎，收集了目前常见的AI写作痕迹的特征，&lt;/p&gt;
&lt;p&gt;可以作为参考。&lt;/p&gt;
&lt;h3 id=&quot;标准化&quot;&gt;标准化&lt;/h3&gt;
&lt;p&gt;内容常常会有一种“滴水不漏”的完美感。&lt;/p&gt;
&lt;p&gt;不管从文章哪一句开始读，读起来都是非常顺口。&lt;/p&gt;
&lt;p&gt;用词规范、句式严谨，语法完美，甚至标点都一丝不苟。&lt;/p&gt;
&lt;p&gt;现实中，这种过度标准，一般只会出现在正式场合和文件里。同理，如果拿新闻通稿、单位行政通知去做AI查重，基本也报&lt;code&gt;疑似ai生成&lt;/code&gt;的提示。&lt;/p&gt;
&lt;h3 id=&quot;中立客观&quot;&gt;中立客观&lt;/h3&gt;
&lt;p&gt;AI公司在设计大语言模型的时候，为了确保AI生成的内容“安全”和“无害”，AI通常被设定为保持中立、客观的立场。&lt;/p&gt;
&lt;p&gt;与人类基于理解和情感写作不同，AI写作本质上是一场概率游戏。&lt;/p&gt;
&lt;p&gt;每当AI要选择下一个词时，它会计算所有可能词汇的概率分布，然后选择最“安全”的那一个。&lt;/p&gt;
&lt;p&gt;它会避免强烈的个人观点和情感色彩，更不会有讽刺、自嘲或幽默感。&lt;/p&gt;
&lt;h3 id=&quot;语法过多&quot;&gt;语法过多&lt;/h3&gt;
&lt;p&gt;在学生时代英语作文中，为了凑字数和拿高分，学生常常需要给普通的句子套用大量语法。&lt;/p&gt;
&lt;p&gt;如今AI也特别喜欢这样写，时光倒流，轮到你化身当年阅卷老师，看看“学生”刻意“凑语法”写出来是什么效果。&lt;/p&gt;
&lt;p&gt;内容中大量使用&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;以……&lt;/li&gt;
&lt;li&gt;首先……其次……最后……&lt;/li&gt;
&lt;li&gt;不仅…还能…甚至…&lt;/li&gt;
&lt;li&gt;总而言之……&lt;/li&gt;
&lt;li&gt;……&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;毫无深度&quot;&gt;毫无深度&lt;/h3&gt;
&lt;p&gt;内容有一种面面俱到却浅尝辄止的感觉。&lt;/p&gt;
&lt;p&gt;喜欢罗列许多要点，但很少深入展开，更不会提出尖锐或原创的观点。&lt;/p&gt;
&lt;p&gt;看完后你会发现文章没有任何重点，完全不知道讲了什么。&lt;/p&gt;
&lt;p&gt;这种“正确的废话”背后，也是AI为了避免出错和争议，选择重复大众共识的策略。&lt;/p&gt;
&lt;h2 id=&quot;去除ai味&quot;&gt;去除AI味&lt;/h2&gt;
&lt;p&gt;最常见就是用&lt;code&gt;AI&lt;/code&gt;给&lt;code&gt;AI内容&lt;/code&gt;去&lt;code&gt;AI味&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;真是离谱他妈给离谱开门，离谱到家了&lt;/p&gt;
&lt;p&gt;常见去味提示词~&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;将所有的句子过渡词和连接词替换为最基础、最常用的词语。尽量使用简单、直接的表达方式，避免使用复杂或生僻的词汇，确保句子之间的逻辑关系清晰，删掉文末总结的部分。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;常见润色提示词~&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;将以上文字重新修改，写作风格界于书面学术写作和口语描述之间，保证所有的句子都要有主语，不要用复杂的长难句，尽量用短句输出，替换掉所有的非日常词汇。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;检测方法&quot;&gt;检测方法&lt;/h2&gt;
&lt;p&gt;目前主流的检测方法是用AIGC检测，也就是AI查重。&lt;/p&gt;
&lt;p&gt;甚至可以用论文查重，毕竟论文是AI生成的重灾区，支持论文查重的网站基本都支持Ai查重。&lt;/p&gt;
&lt;p&gt;分享两个可以免费的AIGC检测，可以检测小文本&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;人民日报：&lt;a href=&quot;https://aigcx.people.cn/AIGC-X&quot;&gt;https://aigcx.people.cn/AIGC-X&lt;/a&gt;（&lt;strong&gt;推荐&lt;/strong&gt;）&lt;/li&gt;
&lt;li&gt;zerogpt：&lt;a href=&quot;https://www.zerogpt.com/&quot;&gt;https://www.zerogpt.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;天眼：&lt;a href=&quot;https://www.tianyanai.org/&quot;&gt;https://www.tianyanai.org/&lt;/a&gt; （补充）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;不过建议还是相信自己的第六感，代入一下自己在什么精神状态下才能写出这样的内容&lt;/p&gt;
&lt;h2 id=&quot;总结&quot;&gt;总结&lt;/h2&gt;
&lt;p&gt;最后，引用网友的一句话&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;规范、严谨不对，随意的、肤浅的、乱七八糟狗屁不通的才是人写的。反智时代，要用反智的标准来衡量事物。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;不知道未来发展会如何，正所谓强者不会抱怨环境，适应很难，但打不过就加入却很简单。&lt;/p&gt;</content:encoded><category>AI</category><category>LLM</category><category>信息技术</category><category>AIGC</category><category>AI味</category><category>AI查重</category><author>Miniwater</author></item><item><title>关闭 n8n 的匿名遥测数据</title><link>https://netlify.krjojo.com/%E5%85%B3%E9%97%AD-n8n-%E7%9A%84%E5%8C%BF%E5%90%8D%E9%81%A5%E6%B5%8B%E6%95%B0%E6%8D%AE/</link><guid isPermaLink="true">https://netlify.krjojo.com/%E5%85%B3%E9%97%AD-n8n-%E7%9A%84%E5%8C%BF%E5%90%8D%E9%81%A5%E6%B5%8B%E6%95%B0%E6%8D%AE/</guid><description>最近升级了最新 n8n 2.0 版本，发现的匿名遥测数据似乎存在问题。

通过官方命令部署的n8n docker容器，遥测请求并不能访问正确网址，全部请求到了本地端口。

如果 n8n 在公网部署并且通过反向代理访问，可能会在浏览器控制台提示一堆错误，但也不影响使用。

```
analytics.js:1310 GET http://localhost:5678/rest/telemetry/rudderstack/sourceConfig/?p=cdn&amp;v=1.33.0 net::ERR_CONNECTION_REFUSED   
xhrModule.js:101  POST http://localhost:5678/rest/telemetry/proxy/v1/track net::ERR_CONNECTION_REFUSED  
xhrModule.js:101  POST http://localhost:5678/rest/telemetry/proxy/v1/identify net::ERR_CONNECTION_REFUSED  
xhrModule.js:101  POST http://localhost:5678/rest/telemetry/proxy/v1/track net::ERR_CONNECTION_REFUSED  
xhrModule.js:101  POST http://localhost:5678/rest/telemetry/proxy/v1/track net::ERR_CONNECTION_REFUSED  
xhrModule.js:101  POST http://localhost:5678/rest/telemetry/proxy/v1/page net::ERR_CONNECTION_REFUSED
```

![](./n8n.webp)

就像这样。

搜了一全，网上说配置 ~~N8N\_TELEMETRY\_ENABLED=false~~ 根本没用，甚至n8n文档都没这个环境变量，AI幻觉太严重了。

## 解决办法

办法有两种，一种是直接关闭遥测（推荐），另一种是配置主机名。

毕竟我都私有部署了，为什么还要发送自己数据呢。

### 关闭匿名遥测数据

添加 `N8N_DIAGNOSTICS_ENABLED = false` 环境变量。

&gt; 注意：在[官方文档](https://docs.n8n.io/hosting/configuration/environment-variables/deployment/)中，禁用的匿名遥测数据同步禁用 Ask AI

docker

```
docker run -it --rm \
 --name n8n \
 -p 5678:5678 \
 -e N8N_DIAGNOSTICS_ENABLED=&quot;false&quot; \
 docker.n8n.io/n8nio/n8n
```

docker compose

```
environment:
    N8N_DIAGNOSTICS_ENABLED: false
```

### 配置主机名字

添加 `N8N_HOST: 域名或IP` 环境变量。

docker

```
docker run -it --rm \
 --name n8n \
 -p 5678:5678 \
 -e N8N_HOST=&quot;www.krjojo.com&quot; \
 docker.n8n.io/n8nio/n8n
```

docker compose

```
environment:
    N8N_HOST: www.krjojo.com
```</description><pubDate>Sun, 14 Dec 2025 04:40:06 GMT</pubDate><content:encoded>&lt;p&gt;最近升级了最新 n8n 2.0 版本，发现的匿名遥测数据似乎存在问题。&lt;/p&gt;
&lt;p&gt;通过官方命令部署的n8n docker容器，遥测请求并不能访问正确网址，全部请求到了本地端口。&lt;/p&gt;
&lt;p&gt;如果 n8n 在公网部署并且通过反向代理访问，可能会在浏览器控制台提示一堆错误，但也不影响使用。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;analytics.js:1310 GET http://localhost:5678/rest/telemetry/rudderstack/sourceConfig/?p=cdn&amp;#x26;v=1.33.0 net::ERR_CONNECTION_REFUSED   &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;xhrModule.js:101  POST http://localhost:5678/rest/telemetry/proxy/v1/track net::ERR_CONNECTION_REFUSED  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;xhrModule.js:101  POST http://localhost:5678/rest/telemetry/proxy/v1/identify net::ERR_CONNECTION_REFUSED  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;xhrModule.js:101  POST http://localhost:5678/rest/telemetry/proxy/v1/track net::ERR_CONNECTION_REFUSED  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;xhrModule.js:101  POST http://localhost:5678/rest/telemetry/proxy/v1/track net::ERR_CONNECTION_REFUSED  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;xhrModule.js:101  POST http://localhost:5678/rest/telemetry/proxy/v1/page net::ERR_CONNECTION_REFUSED&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1550&quot; height=&quot;609&quot; src=&quot;/_astro/n8n.DMa6snVP_1mh8g6.webp&quot; srcset=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;就像这样。&lt;/p&gt;
&lt;p&gt;搜了一全，网上说配置 &lt;del&gt;N8N_TELEMETRY_ENABLED=false&lt;/del&gt; 根本没用，甚至n8n文档都没这个环境变量，AI幻觉太严重了。&lt;/p&gt;
&lt;h2 id=&quot;解决办法&quot;&gt;解决办法&lt;/h2&gt;
&lt;p&gt;办法有两种，一种是直接关闭遥测（推荐），另一种是配置主机名。&lt;/p&gt;
&lt;p&gt;毕竟我都私有部署了，为什么还要发送自己数据呢。&lt;/p&gt;
&lt;h3 id=&quot;关闭匿名遥测数据&quot;&gt;关闭匿名遥测数据&lt;/h3&gt;
&lt;p&gt;添加 &lt;code&gt;N8N_DIAGNOSTICS_ENABLED = false&lt;/code&gt; 环境变量。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;注意：在&lt;a href=&quot;https://docs.n8n.io/hosting/configuration/environment-variables/deployment/&quot;&gt;官方文档&lt;/a&gt;中，禁用的匿名遥测数据同步禁用 Ask AI&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;docker&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;docker run -it --rm \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; --name n8n \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; -p 5678:5678 \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; -e N8N_DIAGNOSTICS_ENABLED=&quot;false&quot; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; docker.n8n.io/n8nio/n8n&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;docker compose&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;environment:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    N8N_DIAGNOSTICS_ENABLED: false&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;配置主机名字&quot;&gt;配置主机名字&lt;/h3&gt;
&lt;p&gt;添加 &lt;code&gt;N8N_HOST: 域名或IP&lt;/code&gt; 环境变量。&lt;/p&gt;
&lt;p&gt;docker&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;docker run -it --rm \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; --name n8n \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; -p 5678:5678 \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; -e N8N_HOST=&quot;www.krjojo.com&quot; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; docker.n8n.io/n8nio/n8n&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;docker compose&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;environment:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    N8N_HOST: www.krjojo.com&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content:encoded><category>Agent</category><category>AI</category><category>信息技术</category><category>Docker</category><category>docker-compose</category><category>n8n</category><category>遥测数据</category><author>Miniwater</author></item><item><title>WordPress 6.9 更新后 SMTP 邮件发送失效解决办法</title><link>https://netlify.krjojo.com/wordpress-6-9-%E6%9B%B4%E6%96%B0%E5%90%8E-smtp-%E9%82%AE%E4%BB%B6%E5%8F%91%E9%80%81%E5%A4%B1%E6%95%88%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95/</link><guid isPermaLink="true">https://netlify.krjojo.com/wordpress-6-9-%E6%9B%B4%E6%96%B0%E5%90%8E-smtp-%E9%82%AE%E4%BB%B6%E5%8F%91%E9%80%81%E5%A4%B1%E6%95%88%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95/</guid><description>在 WordPress 6.9 版本之前，简单配置SMTP服务是这样的。

以QQ邮箱代发为例：

```
add_action(&apos;phpmailer_init&apos;, function ($phpmailer) {
    $phpmailer-&gt;FromName = &apos;手里有只毛毛虫&apos;; //发件人名称
    $phpmailer-&gt;Host = &apos;smtp.qq.com&apos;;
    $phpmailer-&gt;Port = &apos;465&apos;;
    $phpmailer-&gt;Username = &apos;krjojo@qq.com&apos;; //发件人邮箱
    $phpmailer-&gt;Password = &apos;Password&apos;; //发件人密码
    $phpmailer-&gt;From = &apos;krjojo@qq.com&apos;; //发件人邮箱
    $phpmailer-&gt;SMTPAuth = true;
    $phpmailer-&gt;SMTPSecure = &apos;ssl&apos;;
    $phpmailer-&gt;IsSMTP();
});
```

而6.9版本对 `wp_mail（）` 函数进行了改动，变成扩展的方式设置发送地址。

更新文档：[Improved Email Handling and Inline Image Support](https://make.wordpress.org/core/2025/11/25/wordpress-6-9-field-guide/#improved-email-handling-and-inline-image-support)

新版导致的错误：

```
wordpress@krjojo.com : MAIL FROM command failed,Mail from address must be same as authorization user. ,501, SMTP 服务器错误：MAIL FROM command failed 详情：Mail from address must be same as authorization user. SMTP 代码：501
```

要恢复正常，需要追加以下设置

```
add_filter(&apos;wp_mail_from&apos;, function () {
    return &apos;krjojo@qq.com&apos;; //发件人邮箱
});
```</description><pubDate>Fri, 05 Dec 2025 03:23:38 GMT</pubDate><content:encoded>&lt;p&gt;在 WordPress 6.9 版本之前，简单配置SMTP服务是这样的。&lt;/p&gt;
&lt;p&gt;以QQ邮箱代发为例：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;add_action(&apos;phpmailer_init&apos;, function ($phpmailer) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    $phpmailer-&gt;FromName = &apos;手里有只毛毛虫&apos;; //发件人名称&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    $phpmailer-&gt;Host = &apos;smtp.qq.com&apos;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    $phpmailer-&gt;Port = &apos;465&apos;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    $phpmailer-&gt;Username = &apos;krjojo@qq.com&apos;; //发件人邮箱&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    $phpmailer-&gt;Password = &apos;Password&apos;; //发件人密码&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    $phpmailer-&gt;From = &apos;krjojo@qq.com&apos;; //发件人邮箱&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    $phpmailer-&gt;SMTPAuth = true;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    $phpmailer-&gt;SMTPSecure = &apos;ssl&apos;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    $phpmailer-&gt;IsSMTP();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;而6.9版本对 &lt;code&gt;wp_mail（）&lt;/code&gt; 函数进行了改动，变成扩展的方式设置发送地址。&lt;/p&gt;
&lt;p&gt;更新文档：&lt;a href=&quot;https://make.wordpress.org/core/2025/11/25/wordpress-6-9-field-guide/#improved-email-handling-and-inline-image-support&quot;&gt;Improved Email Handling and Inline Image Support&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;新版导致的错误：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;wordpress@krjojo.com : MAIL FROM command failed,Mail from address must be same as authorization user. ,501, SMTP 服务器错误：MAIL FROM command failed 详情：Mail from address must be same as authorization user. SMTP 代码：501&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;要恢复正常，需要追加以下设置&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;add_filter(&apos;wp_mail_from&apos;, function () {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    return &apos;krjojo@qq.com&apos;; //发件人邮箱&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content:encoded><category>PHP</category><category>WordPress</category><category>信息技术</category><category>smtp</category><category>邮件</category><author>Miniwater</author></item></channel></rss>