<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
>
<channel>
<title><![CDATA[墨桅博客]]></title> 
<atom:link href="https://www.jetmast.com/rss.php" rel="self" type="application/rss+xml" />
<description><![CDATA[分享写作心法与实用干货]]></description>
<link>https://www.jetmast.com/</link>
<language>zh-cn</language>

<item>
    <title>05月23日，星期六，在这里每天60秒读懂世界！</title>
    <link>https://www.jetmast.com/daily-brief/2.html</link>
    <description><![CDATA[<div style="font-size:16px; font-weight:bold; line-height:2; padding:0 10px;">1. 今天缅怀袁隆平、吴孟超两位院士。<br>
2. 奶奶跨越5000公里探望5胞胎泪洒现场。<br>
3. “幸好没扎脸上 不然婚都结不了了”。<br>
4. 西安官方通报“宠物狗上桌吃饭”。<br>
5. 5万棵树的“恩人”找到了。<br>
6. 投了一家公司 合肥赚了一个合肥。<br>
7. 建议少用一次性纸杯盛热水。<br>
8. 中国空间站将迎第八次“太空会师”。<br>
9. 男子一年“加班”150余次 老板报警。<br>
10. 给阿嬷的情书拿到第一个电影奖。<br>
11. 中央纪委连打三虎。<br>
12. 食用油用火烧一下，就能辨别优劣？。<br>
13. 汽车产业版图又将蹿出一匹黑马？。<br>
14. 昆虫学家辟谣一只鹿角天牛58万。<br>
15. 11省区市有大到暴雨 局地有大暴雨。<br>
16. 南美足联呼吁下届世界杯扩至66队。<br>
17. 四部委发布20条底线要求。<br>
18. U17国足前瞻：冲22年洲际大赛首冠。<br>
19. 老爷爷为妻子摘花 花主人改警示牌。<br>
20. 夏季“顶流”小龙虾批发价“跳水”。<br>
21. 净网：拍到“野生华南虎”系谣言。<br>
22. 今年暴雨为啥这么早这么猛。<br>
23. 事关中国，瑙鲁出台公务规范。<br>
24. 今夜请为他们的17岁呐喊。<br>
25. 男子高铁脱鞋踩座抠脚 12306回应。<br>
26. 英格兰26人名单提前曝光。<br>
27. U17男足世界杯：中国与西班牙同组。<br>
28. 导游机器人、外卖机器狗上岗。<br>
29. 美媒：中国"正在重新发明汽车"。<br>
30. “省的油钱 全贴进修车费了”。<br>
31. 33615架无人机刷新三项世界纪录。<br>
32. 理财产品迎大规模降费潮。<br>
33. 正考虑收购玛莎拉蒂？比亚迪回应。<br>
34. 全球近四分之三电动车产自中国。<br>
35. 伊朗最高领袖：接近武器级的铀得留下。<br>
36. 郑钦文法网首战资格赛选手。<br>
37. 期待更多疫苗进入医保支付白名单。<br>
38. 没有继承人 遗产谁来管。<br>
39. 蔚来连续两季度盈利。<br>
40. 为朋友买彩票中百万 起诉要奖金被驳回。<br>
</div>]]></description>
    <pubDate>Sat, 23 May 2026 01:00:02 +0800</pubDate>
    <dc:creator>墨桅</dc:creator>
    <guid>https://www.jetmast.com/daily-brief/2.html</guid>
</item>
<item>
    <title>最新HEU_KMS_Activator_v63.3.4激活工具，Windows11/10和Office 永久激活工具！同步更新</title>
    <link>https://www.jetmast.com/tech-tutorial/1877.html</link>
    <description><![CDATA[<p class="wp-block-paragraph">这款激活工具是存在为数不多的安全良心的激活工具，而且完全免费，从13年Windows8时代作者就默默更新维护至今。</p>
<p class="wp-block-paragraph">小编也是对这款激活工具多次推荐，如果你对它还是太了解，下面简单介绍一下它的使用方法。</p>
<p><a href="http://img.jetmast.com/upload/2026/05/202605221744357NupD6.png" target="_blank" rel="noopener"><img src="http://img.jetmast.com/upload/2026/05/202605221744357NupD6.png" alt="image.png"></a></p>
<p>软件共支持四种激活方式，智能激活、KMS激活、数字激活、OEM激活。其中智能激活会自动按顺序选择工具中所有的激活方案对你的Windows或Office进行激活，直至永久激活成功。</p>
<h3 class="wp-block-heading"><strong>Windows 激活</strong></h3>
<p class="wp-block-paragraph">如果你的电脑系统是Windows10/11，那么请直接选择数字激活，使用数字激活成功后为永久激活，直接获得数字许可证，以后就算你重装系统也不会失效，重装联网后会自动激活。</p>
<p class="wp-block-paragraph">注意：数字激活无法激活LTSC用户，只能使用KMS38进行激活，KMS38激活可将180天的有效期激活延长至2038年，理论永久！</p>
<p><a href="http://img.jetmast.com/upload/2026/05/202605221745257N803J.png" target="_blank" rel="noopener"><img src="http://img.jetmast.com/upload/2026/05/202605221745257N803J.png" alt="image.png"></a></p>
<h3 class="wp-block-heading"><strong>Office 激活</strong></h3>
<p class="wp-block-paragraph">任何版本的Office 激活都可以直接选择 KMS 激活，KMS 激活并非永久激活，激活时效为180天，但你可以勾选自动续期功能，到期之后KMS服务器将为你自动激活，理论上也可以达到永久激活效果！</p>
<p><a href="http://img.jetmast.com/upload/2026/05/202605221745587NVzw7.png" target="_blank" rel="noopener"><img src="http://img.jetmast.com/upload/2026/05/202605221745587NVzw7.png" alt="image.png"></a></p>
<p>工具搬运来自作者公众号，软件会被微软自带杀毒软件Microsoft Defender报毒，如果你没有安装其他的安全工具请关闭相关防护。浏览器下载时也会出现异常文件，点击保留即可！</p>
<h2 class="wp-block-heading"><strong>下载地址</strong></h2>
<p class="wp-block-paragraph"><strong>作者开源地址：</strong><a href="https://github.com/zbezj/HEU_KMS_Activator/releases" target="_blank" rel="noopener">https://github.com/zbezj/HEU_KMS_Activator/releases</a><br><br>下载地址1：https://wwi.lanzoup.com/b05gumbe 密码:9xum<br>（来源作者公众号）</p>
<p class="wp-block-paragraph">【解压密码：HEU168】</p>
<h2 class="wp-block-heading"><strong>更新日志</strong></h2>
<p><br><strong>[2026.4.21] v63.3.4 更新说明：</strong><br>&nbsp; &nbsp;1.改进了激活服务的重启方式，避免因输出管道阻塞而卡死。</p>
<p>&nbsp; &nbsp;文件:HEU_KMS_Activator_v63.3.4.exe<br>&nbsp; &nbsp;MD5: C5ADFDBE375DADAECDB0C53AAD37FB5C<br>&nbsp; &nbsp;SHA1: B1CA82FFF9EE0F83F13E1C07F2549C9BD8F863D3<br>&nbsp; &nbsp;SHA256: DBE10240FC4841A60410DF3EE1704487F43A8E19158AEA99DDD8EA214BAB23B6<br>&nbsp; &nbsp;<br><strong>[2026.3.31] v63.3.3 更新说明：</strong><br>&nbsp; &nbsp;1.经典界面中，多处文字显示不完整的地方进行修改。<br>&nbsp; &nbsp;2.修复数字许可证激活过程中，ClipSVC服务导致的界面无响应问题。</p>
<p>&nbsp; &nbsp;文件:HEU_KMS_Activator_v63.3.3.exe<br>&nbsp; &nbsp;MD5: 9AA05F4040AEEC0CE5BFC74B67C8E8EB<br>&nbsp; &nbsp;SHA1: 9F38278BCEEA85B12BE53FD6485B841B90B55E30<br>&nbsp; &nbsp;SHA256: C90C4330DFB4917462B15C35D7A0AF5FA926C4922AC5AADD9978A844B1193FA6</p>
<p><strong>[2026.3.5] v63.3.2 更新说明：</strong><br>&nbsp; &nbsp;1.修复TSForge激活Core/IoTEnterprise/ServerRdsh等ESU版本失败的问题。<br>&nbsp; &nbsp;2.新增Windows 11 WNC（Windows Cloud PC/WCPC）版本数字激活。<br>&nbsp; &nbsp;3.新增4张背景壁纸。</p>
<p>&nbsp; &nbsp;文件:HEU_KMS_Activator_v63.3.2.exe<br>&nbsp; &nbsp;MD5: 46225B11593FE93E8818BB38CB86CAB2<br>&nbsp; &nbsp;SHA1: 38701CEC66F53F45A65C43E4F92CCBE66DFAEE0C<br>&nbsp; &nbsp;SHA256: E620CFD753DE732F24A163C46CDD48A20F5933D32C5BBDA9DF57EA51AE5C5B38</p>]]></description>
    <pubDate>Fri, 22 May 2026 17:35:54 +0800</pubDate>
    <dc:creator>墨桅</dc:creator>
    <guid>https://www.jetmast.com/tech-tutorial/1877.html</guid>
</item>
<item>
    <title>分享一个豆包生成图片解析无水印原图PHP源码</title>
    <link>https://www.jetmast.com/website-source/1874.html</link>
    <description><![CDATA[<p>豆包生成的图片保存总是有水印使用ps去除也很麻烦，分享一个去水印的api可以快速获取无水印图片。</p>
<h3 id="wznav_0">使用方法</h3>
<p>长按消息快 弹出菜单 点击分享 然后复制链接</p>
<p>api.php/?url=链接</p>
<p>就会返回所有无水印原图，注意非国内服务器好像不行。</p>
<p><a href="http://img.jetmast.com/upload/2026/05/202605190938247NjRgd.png" target="_blank" rel="noopener"><img src="http://img.jetmast.com/upload/2026/05/202605190938247NjRgd.png" alt="image.png" width="500"></a></p>
<p>方便大家使用，做个前端给大家免费使用，地址：<a href="https://tool.jetmast.com/doubao/" target="_blank" rel="noopener">豆包图片解析器</a></p>
<p>api.php代码：</p>
<p>[lv]&nbsp;</p>
<pre class="language-php"><code>&lt;?php
/**
 * 豆包图片解析API - 多图版
 * 功能：提取所有图片地址，过滤watermark链接
 * 仅供学习参考，请勿用于非法用途。
 */

header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST');

if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(200);
    exit();
}

class DoubaoImageParser {

    private $userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36";

    /**
     * 解析豆包图片 - 多图版
     * @param string $url 豆包分享链接
     * @param int $retryCount 重试次数
     * @return array 解析结果
     */
    public function parse($url, $retryCount = 3) {
        // 1. 提取URL
        $filteredUrl = $this-&gt;extractURL($url);
        if (!$filteredUrl) {
            return ['success' =&gt; false, 'message' =&gt; '无效的链接地址'];
        }

        // 2. 检查是否为豆包链接
        if (strpos($filteredUrl, 'doubao.com') === false) {
            return ['success' =&gt; false, 'message' =&gt; '不是豆包平台链接'];
        }

        // 3. 多次尝试获取内容
        for ($i = 0; $i &lt; $retryCount; $i++) {
            if ($i &gt; 0) {
                usleep(500000); // 等待0.5秒后重试
            }

            $html = $this-&gt;getWebContent($filteredUrl);
            if (!$html) {
                continue;
            }

            // 解析所有图片
            $images = $this-&gt;parseAllImages($html);

            if (!empty($images)) {
                // 去重并过滤水印
                $images = array_values(array_unique($images));
                $filteredImages = $this-&gt;filterWatermarkImages($images);

                return [
                    'success' =&gt; true,
                    'message' =&gt; '解析成功，共找到 ' . count($filteredImages) . ' 张图片',
                    'data' =&gt; [
                        'urls' =&gt; $filteredImages,
                        'count' =&gt; count($filteredImages),
                        'all_urls' =&gt; $images
                    ]
                ];
            }
        }

        return ['success' =&gt; false, 'message' =&gt; '多次尝试后仍未找到图片链接，请检查链接是否有效'];
    }

    /**
     * 解析所有图片
     */
    private function parseAllImages($html) {
        $allImages = [];

        // 方法1: 匹配 image_ori_raw 中的图片
        if (preg_match_all('/image_ori_raw":\s*\{[^}]*"url":"([^"]+)"/', $html, $matches)) {
            foreach ($matches[1] as $url) {
                $cleanUrl = $this-&gt;cleanUrl($url);
                if ($cleanUrl) {
                    $allImages[] = $this-&gt;finalCleanUrl($cleanUrl);
                }
            }
        }

        // 方法2: 解码后匹配
        $decoded = $this-&gt;htmlEscape($html);
        $decoded = $this-&gt;decodeUnicode($decoded);
        $decoded = $this-&gt;removeBackslashEscape($decoded);

        if (preg_match_all('/"url"\s*:\s*"([^"]*byteimg\.com[^"]*)"/i', $decoded, $matches)) {
            foreach ($matches[1] as $url) {
                $cleanUrl = $this-&gt;cleanUrl($url);
                if ($cleanUrl &amp;&amp; strpos($cleanUrl, 'byteimg.com') !== false) {
                    $allImages[] = $this-&gt;finalCleanUrl($cleanUrl);
                }
            }
        }

        // 方法3: 直接匹配 byteimg.com 链接
        if (preg_match_all('/https?:\/\/[^\s"\'&lt;&gt;]*byteimg\.com[^\s"\'&lt;&gt;]*/i', $html, $matches)) {
            foreach ($matches[0] as $url) {
                $cleanUrl = $this-&gt;cleanUrl($url);
                if ($cleanUrl) {
                    $allImages[] = $this-&gt;finalCleanUrl($cleanUrl);
                }
            }
        }

        // 方法4: 匹配 JSON 格式的图片数组
        if (preg_match_all('/"image_list"\s*:\s*\[(.*?)\]/s', $html, $matches)) {
            foreach ($matches[1] as $imageList) {
                if (preg_match_all('/"url"\s*:\s*"([^"]+)"/', $imageList, $urlMatches)) {
                    foreach ($urlMatches[1] as $url) {
                        $cleanUrl = $this-&gt;cleanUrl($url);
                        if ($cleanUrl) {
                            $allImages[] = $this-&gt;finalCleanUrl($cleanUrl);
                        }
                    }
                }
            }
        }

        // 方法5: 匹配 images 数组
        if (preg_match_all('/"images"\s*:\s*\[(.*?)\]/s', $html, $matches)) {
            foreach ($matches[1] as $imageList) {
                if (preg_match_all('/"url"\s*:\s*"([^"]+)"/', $imageList, $urlMatches)) {
                    foreach ($urlMatches[1] as $url) {
                        $cleanUrl = $this-&gt;cleanUrl($url);
                        if ($cleanUrl &amp;&amp; strpos($cleanUrl, 'byteimg.com') !== false) {
                            $allImages[] = $this-&gt;finalCleanUrl($cleanUrl);
                        }
                    }
                }
            }
        }

        // 方法6: 匹配转义后的 Unicode URL
        if (preg_match_all('/"url":"(\\\\u[0-9a-fA-F]{4}[^"]*byteimg\.com[^"]*)"/i', $html, $matches)) {
            foreach ($matches[1] as $url) {
                $decodedUrl = $this-&gt;decodeUnicode($url);
                $cleanUrl = $this-&gt;cleanUrl($decodedUrl);
                if ($cleanUrl) {
                    $allImages[] = $this-&gt;finalCleanUrl($cleanUrl);
                }
            }
        }

        return $allImages;
    }

    /**
     * 过滤水印图片
     */
    private function filterWatermarkImages($images) {
        $filtered = [];
        foreach ($images as $url) {
            // 过滤包含 watermark 的链接
            if (strpos($url, 'watermark') === false &amp;&amp; 
                strpos($url, 'wm.') === false &amp;&amp;
                strpos($url, '/wm/') === false) {
                $filtered[] = $url;
            }
        }

        // 如果没有无水印的，返回所有
        if (empty($filtered)) {
            return $images;
        }

        return $filtered;
    }

    /**
     * 获取网页内容
     */
    private function getWebContent($url) {
        $ch = curl_init();
        curl_setopt_array($ch, [
            CURLOPT_URL =&gt; $url,
            CURLOPT_RETURNTRANSFER =&gt; true,
            CURLOPT_FOLLOWLOCATION =&gt; true,
            CURLOPT_TIMEOUT =&gt; 30,
            CURLOPT_USERAGENT =&gt; $this-&gt;userAgent,
            CURLOPT_SSL_VERIFYPEER =&gt; false,
            CURLOPT_SSL_VERIFYHOST =&gt; false,
            CURLOPT_ENCODING =&gt; '',
            CURLOPT_HTTPHEADER =&gt; [
                'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
                'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8',
                'Cache-Control: no-cache',
                'Connection: keep-alive',
                'Referer: https://www.doubao.com/'
            ]
        ]);

        $content = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        if ($httpCode !== 200) {
            return null;
        }

        return $content;
    }

    /**
     * HTML转义处理
     */
    private function htmlEscape($content) {
        $replacements = [
            '&amp;apos;' =&gt; "'",
            '&amp;ensp;' =&gt; " ",
            '&amp;emsp;' =&gt; " ",
            '&amp;thinsp;' =&gt; " ",
            '&amp;nbsp;' =&gt; " ",
            '&amp;lt;' =&gt; "&lt;",
            '&amp;gt;' =&gt; "&gt;",
            '&amp;amp;' =&gt; "&amp;",
            '&amp;quot;' =&gt; '"',
            '&amp;#39;' =&gt; "'",
            '&amp;#47;' =&gt; "/",
            '#x27' =&gt; "\\",
            '&amp;#x60' =&gt; "`",
            '&amp;copy' =&gt; "&copy;",
        ];

        foreach ($replacements as $k =&gt; $v) {
            $content = str_replace($k, $v, $content);
        }

        $content = str_replace("&amp;amp;", "&amp;", $content);

        return $content;
    }

    /**
     * Unicode解码
     */
    private function decodeUnicode($s) {
        $s = preg_replace_callback('/\\\\u([0-9A-Fa-f]{4})/', function($matches) {
            $code = hexdec($matches[1]);
            return $this-&gt;unicodeToUtf8($code);
        }, $s);

        return $s;
    }

    /**
     * 移除反斜杠转义
     */
    private function removeBackslashEscape($s) {
        $s = str_replace('\\\\', '\\', $s);
        $s = str_replace('\\"', '"', $s);
        $s = str_replace('\\/', '/', $s);

        return $s;
    }

    /**
     * Unicode码点转UTF-8字符
     */
    private function unicodeToUtf8($code) {
        if ($code &lt;= 0x7F) {
            return chr($code);
        } elseif ($code &lt;= 0x7FF) {
            return chr(0xC0 | ($code &gt;&gt; 6)) . chr(0x80 | ($code &amp; 0x3F));
        } elseif ($code &lt;= 0xFFFF) {
            return chr(0xE0 | ($code &gt;&gt; 12)) . chr(0x80 | (($code &gt;&gt; 6) &amp; 0x3F)) . chr(0x80 | ($code &amp; 0x3F));
        } elseif ($code &lt;= 0x10FFFF) {
            return chr(0xF0 | ($code &gt;&gt; 18)) . chr(0x80 | (($code &gt;&gt; 12) &amp; 0x3F)) . chr(0x80 | (($code &gt;&gt; 6) &amp; 0x3F)) . chr(0x80 | ($code &amp; 0x3F));
        }
        return '?';
    }

    /**
     * 清理图片URL
     */
    private function cleanUrl($url) {
        $url = stripslashes($url);
        $url = trim($url, '"\'');
        $url = str_replace('\/', '/', $url);
        return $url;
    }

    /**
     * 最终清理URL
     */
    private function finalCleanUrl($url) {
        $url = preg_replace_callback('/\\\\u0026/', function() {
            return '&amp;';
        }, $url);

        $url = str_replace('%3D', '=', $url);
        $url = str_replace('%3A', ':', $url);
        $url = str_replace('%2F', '/', $url);
        $url = str_replace('%3F', '?', $url);
        $url = str_replace('\\', '', $url);

        // 移除水印参数
        if (($pos = strpos($url, '?')) !== false) {
            $baseUrl = substr($url, 0, $pos);
            parse_str(substr($url, $pos + 1), $params);
            unset($params['watermark']);
            unset($params['wm']);
            $newParams = http_build_query($params);
            $url = $baseUrl . ($newParams ? '?' . $newParams : '');
        }

        return $url;
    }

    /**
     * 提取URL
     */
    private function extractURL($str) {
        $pattern = '/https?:\/\/[-A-Za-z0-9+&amp;@#\/%?=~_|!:,.;]+[-A-Za-z0-9+&amp;@#\/%=~_|]/';
        if (preg_match($pattern, $str, $matches)) {
            return $matches[0];
        }
        return null;
    }

    /**
     * 下载单张图片 - 返回图片数据
     */
    public function downloadImageData($url) {
        $ch = curl_init($url);
        curl_setopt_array($ch, [
            CURLOPT_RETURNTRANSFER =&gt; true,
            CURLOPT_FOLLOWLOCATION =&gt; true,
            CURLOPT_MAXREDIRS =&gt; 10,
            CURLOPT_TIMEOUT =&gt; 60,
            CURLOPT_USERAGENT =&gt; $this-&gt;userAgent,
            CURLOPT_SSL_VERIFYPEER =&gt; false,
            CURLOPT_SSL_VERIFYHOST =&gt; false,
            CURLOPT_REFERER =&gt; 'https://www.doubao.com/',
            CURLOPT_ENCODING =&gt; '',
            CURLOPT_HTTPHEADER =&gt; [
                'Accept: image/webp,image/apng,image/*,*/*;q=0.8',
                'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8',
                'Cache-Control: no-cache',
                'Pragma: no-cache'
            ]
        ]);

        $imageData = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        $contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
        $error = curl_error($ch);
        curl_close($ch);

        if ($imageData &amp;&amp; $httpCode === 200 &amp;&amp; strlen($imageData) &gt; 0) {
            $extension = $this-&gt;getImageExtension($imageData, $contentType);
            return [
                'success' =&gt; true,
                'data' =&gt; $imageData,
                'extension' =&gt; $extension,
                'size' =&gt; strlen($imageData),
                'content_type' =&gt; $contentType
            ];
        }

        // 尝试使用 file_get_contents
        if (ini_get('allow_url_fopen')) {
            $context = stream_context_create([
                'http' =&gt; [
                    'method' =&gt; 'GET',
                    'header' =&gt; "User-Agent: {$this-&gt;userAgent}\r\n" .
                               "Accept: image/webp,image/apng,image/*,*/*;q=0.8\r\n" .
                               "Referer: https://www.doubao.com/\r\n",
                    'follow_location' =&gt; 1,
                    'max_redirects' =&gt; 10,
                    'timeout' =&gt; 60
                ],
                'ssl' =&gt; [
                    'verify_peer' =&gt; false,
                    'verify_peer_name' =&gt; false
                ]
            ]);

            $imageData = @file_get_contents($url, false, $context);

            if ($imageData &amp;&amp; strlen($imageData) &gt; 0) {
                $extension = $this-&gt;getImageExtension($imageData, null);
                return [
                    'success' =&gt; true,
                    'data' =&gt; $imageData,
                    'extension' =&gt; $extension,
                    'size' =&gt; strlen($imageData),
                    'content_type' =&gt; 'image/' . $extension
                ];
            }
        }

        return ['success' =&gt; false, 'message' =&gt; '下载失败: ' . ($error ?: '未知错误')];
    }

    /**
     * 获取图片扩展名
     */
    private function getImageExtension($imageData, $contentType) {
        // 通过文件头判断（最准确）
        $header = substr($imageData, 0, 12);

        // PNG
        if (strpos($header, "\x89PNG\r\n\x1A\n") === 0) {
            return 'png';
        }

        // JPEG
        if (strpos($header, "\xFF\xD8\xFF") === 0) {
            return 'jpg';
        }

        // GIF
        if (strpos($header, "GIF87a") === 0 || strpos($header, "GIF89a") === 0) {
            return 'gif';
        }

        // WebP
        if (strpos($header, "RIFF") === 0 &amp;&amp; strpos(substr($header, 8, 4), "WEBP") !== false) {
            return 'webp';
        }

        // BMP
        if (strpos($header, "BM") === 0) {
            return 'bmp';
        }

        // 通过 MIME 类型判断
        if (function_exists('finfo_open')) {
            $finfo = finfo_open(FILEINFO_MIME_TYPE);
            $mimeType = finfo_buffer($finfo, $imageData);
            finfo_close($finfo);
        } else {
            $mimeType = $contentType;
        }

        if ($mimeType) {
            $extMap = [
                'image/jpeg' =&gt; 'jpg',
                'image/jpg' =&gt; 'jpg',
                'image/png' =&gt; 'png',
                'image/gif' =&gt; 'gif',
                'image/webp' =&gt; 'webp',
                'image/bmp' =&gt; 'bmp',
                'image/x-ms-bmp' =&gt; 'bmp'
            ];

            foreach ($extMap as $mime =&gt; $ext) {
                if (strpos($mimeType, $mime) !== false) {
                    return $ext;
                }
            }
        }

        return 'jpg';
    }

    /**
     * 生成安全的文件名
     */
    public function generateFilename($url, $extension = 'jpg') {
        // 尝试从URL提取文件名
        $path = parse_url($url, PHP_URL_PATH);
        if ($path) {
            $basename = basename($path);
            // 移除查询参数
            $basename = preg_replace('/\?.*$/', '', $basename);

            if ($basename &amp;&amp; preg_match('/\.(jpg|jpeg|png|gif|webp|bmp)$/i', $basename, $matches)) {
                $filename = preg_replace('/[^\w\s\.-]/u', '', $basename);
                if (strlen($filename) &gt; 100) {
                    $filename = substr($filename, 0, 100);
                }
                return $filename;
            }
        }

        // 生成默认文件名
        return 'doubao_image_' . date('Ymd_His') . '_' . uniqid() . '.' . $extension;
    }
}

// 处理请求
$parser = new DoubaoImageParser();

// 处理下载请求（新方式：action=download）
if (isset($_GET['action']) &amp;&amp; $_GET['action'] === 'download') {
    $imageUrl = isset($_GET['image_url']) ? $_GET['image_url'] : null;
    $filename = isset($_GET['filename']) ? $_GET['filename'] : null;

    if (!$imageUrl) {
        header('HTTP/1.1 400 Bad Request');
        header('Content-Type: text/plain; charset=utf-8');
        echo '缺少图片URL';
        exit();
    }

    // 下载图片
    $result = $parser-&gt;downloadImageData($imageUrl);

    if ($result['success']) {
        if (!$filename) {
            $filename = $parser-&gt;generateFilename($imageUrl, $result['extension']);
        }

        // 清理文件名
        $filename = basename($filename);
        $filename = preg_replace('/[^\w\s\.-]/u', '', $filename);

        // 清理输出缓冲区
        while (ob_get_level()) {
            ob_end_clean();
        }

        // 设置下载头
        header('Content-Type: image/' . $result['extension']);
        header('Content-Disposition: attachment; filename="' . $filename . '"');
        header('Content-Length: ' . $result['size']);
        header('Cache-Control: no-cache, no-store, must-revalidate');
        header('Pragma: no-cache');
        header('Expires: 0');
        header('Content-Transfer-Encoding: binary');

        echo $result['data'];
        exit();
    } else {
        header('HTTP/1.1 404 Not Found');
        header('Content-Type: text/plain; charset=utf-8');
        echo '下载失败: ' . $result['message'];
        exit();
    }
}

// 兼容旧版下载方式
if (isset($_REQUEST['download']) &amp;&amp; $_REQUEST['download'] == 1) {
    $imageUrl = isset($_REQUEST['image_url']) ? $_REQUEST['image_url'] : null;

    if ($imageUrl) {
        $result = $parser-&gt;downloadImageData($imageUrl);
        if ($result['success']) {
            $filename = $parser-&gt;generateFilename($imageUrl, $result['extension']);

            while (ob_get_level()) {
                ob_end_clean();
            }

            header('Content-Type: image/' . $result['extension']);
            header('Content-Disposition: attachment; filename="' . $filename . '"');
            header('Content-Length: ' . $result['size']);
            header('Cache-Control: no-cache, must-revalidate');
            echo $result['data'];
            exit();
        }
    }

    // 兼容旧版：如果没提供image_url，则解析url并下载第一张
    $url = isset($_REQUEST['url']) ? $_REQUEST['url'] : null;
    if ($url) {
        $parseResult = $parser-&gt;parse($url);
        if ($parseResult['success'] &amp;&amp; !empty($parseResult['data']['urls'])) {
            $firstImage = $parseResult['data']['urls'][0];
            $result = $parser-&gt;downloadImageData($firstImage);
            if ($result['success']) {
                $filename = $parser-&gt;generateFilename($firstImage, $result['extension']);

                while (ob_get_level()) {
                    ob_end_clean();
                }

                header('Content-Type: image/' . $result['extension']);
                header('Content-Disposition: attachment; filename="' . $filename . '"');
                header('Content-Length: ' . $result['size']);
                header('Cache-Control: no-cache, must-revalidate');
                echo $result['data'];
                exit();
            }
        }
    }

    echo json_encode(['success' =&gt; false, 'message' =&gt; '下载失败，请重试'], JSON_UNESCAPED_UNICODE);
    exit();
}

// 正常解析请求
$url = isset($_REQUEST['url']) ? $_REQUEST['url'] : null;

if (!$url) {
    echo json_encode([
        'success' =&gt; false,
        'message' =&gt; '请提供url参数'
    ], JSON_UNESCAPED_UNICODE);
    exit();
}

$result = $parser-&gt;parse($url);
echo json_encode($result, JSON_UNESCAPED_UNICODE);
?&gt;</code></pre>
<p>[/lv]</p>]]></description>
    <pubDate>Tue, 19 May 2026 09:34:56 +0800</pubDate>
    <dc:creator>墨桅</dc:creator>
    <guid>https://www.jetmast.com/website-source/1874.html</guid>
</item>
<item>
    <title>美食大转盘点餐助手HTML源码2.0版</title>
    <link>https://www.jetmast.com/web-code/1868.html</link>
    <description><![CDATA[<h2>源码介绍</h2>
<p>一款解决&ldquo;吃什么&rdquo;难题的趣味点餐助手。通过随机转盘形式，为您推荐美食选择，并支持自定义菜单，让点餐过程变得轻松有趣，是朋友聚餐与日常用餐的决策好帮手。</p>
<p><a href="http://img.jetmast.com/upload/2026/05/202605122324597NjjpC.png" target="_blank" rel="noopener"><img src="http://img.jetmast.com/upload/2026/05/202605122324597NjjpC.png" alt="image.png"></a></p>
<h2>源码：</h2>
<p>演示：<a href="https://tool.jetmast.com/chi/" target="_blank" rel="noopener">https://tool.jetmast.com/chi/</a></p>
<pre class="language-markup"><code>&lt;!DOCTYPE html&gt;
&lt;html lang="zh-CN"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"&gt;
    &lt;title&gt;美食大转盘 - 点餐助手 - 墨桅博客jetmast.com&lt;/title&gt;
    &lt;style&gt;
        /* 
        ============================================
        样式表说明 - 现代素雅版
        ============================================
        设计理念:
        - 保留原有的简约、清晰、易用风格
        - 加入现代玻璃拟态和深度设计元素
        - 优化移动端触摸体验和视觉效果
        - 保持功能完整性和代码可维护性
        ============================================
        */

        :root {
            --primary-color: #4a90e2;
            --primary-light: #6aa8f7;
            --primary-dark: #357abd;
            --secondary-color: #50c878;
            --accent-color: #ff8c42;
            --danger-color: #ff6b6b;
            --warning-color: #ffa726;
            --text-primary: #2d3748;
            --text-secondary: #718096;
            --text-light: #a0aec0;
            --bg-primary: #ffffff;
            --bg-secondary: #f7fafc;
            --bg-overlay: rgba(255, 255, 255, 0.85);
            --border-color: #e2e8f0;
            --shadow-light: rgba(0, 0, 0, 0.04);
            --shadow-medium: rgba(0, 0, 0, 0.1);
            --shadow-heavy: rgba(0, 0, 0, 0.15);
            --glass-blur: 12px;
        }

        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
            -webkit-tap-highlight-color: transparent;
        }

        html {
            scroll-behavior: smooth;
        }

        body {
            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif;
            min-height: 100vh;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            background-attachment: fixed;
            padding: 1rem;
            color: var(--text-primary);
            line-height: 1.6;
            overflow-x: hidden;
        }

        .container {
            max-width: 1200px;
            margin: 0 auto;
        }

        .header {
            text-align: center;
            margin-bottom: 2rem;
            padding-bottom: 1.5rem;
            border-bottom: 1px solid rgba(255, 255, 255, 0.2);
        }

        .header h1 {
            font-size: clamp(1.8rem, 5vw, 2.8rem);
            font-weight: 800;
            color: white;
            margin: 0.5rem 0;
            letter-spacing: -0.5px;
            text-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
        }

        .header p {
            color: rgba(255, 255, 255, 0.9);
            font-size: 1.1rem;
            font-weight: 400;
            margin-top: 0.5rem;
            max-width: 600px;
            margin-left: auto;
            margin-right: auto;
        }

        .shortcut-hint {
            display: inline-block;
            background: rgba(255, 255, 255, 0.15);
            color: white;
            padding: 0.4rem 0.8rem;
            border-radius: 20px;
            font-size: 0.9rem;
            margin-top: 1rem;
            border: 1px solid rgba(255, 255, 255, 0.2);
            backdrop-filter: blur(var(--glass-blur));
        }

        .main-grid {
            display: grid;
            grid-template-columns: 350px 1fr;
            gap: 2rem;
            align-items: start;
        }

        @media (max-width: 900px) {
            .main-grid {
                grid-template-columns: 1fr;
            }
            .list-panel { order: 2; }
            .wheel-panel { order: 1; }
        }

        .panel {
            background: var(--bg-overlay);
            border-radius: 20px;
            padding: 1.5rem;
            border: 1px solid rgba(255, 255, 255, 0.3);
            box-shadow: 0 8px 32px var(--shadow-medium);
            transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
            backdrop-filter: blur(var(--glass-blur));
        }

        .panel:hover {
            box-shadow: 0 12px 40px var(--shadow-heavy);
            transform: translateY(-2px);
        }

        .panel-header {
            display: flex;
            align-items: center;
            justify-content: space-between;
            margin-bottom: 1.5rem;
            padding-bottom: 1rem;
            border-bottom: 1px solid var(--border-color);
            flex-wrap: wrap;
            gap: 0.75rem;
        }

        .panel-header h2 {
            font-size: 1.4rem;
            font-weight: 700;
            color: var(--text-primary);
            display: flex;
            align-items: center;
            gap: 0.5rem;
        }

        .count-badge {
            font-size: 0.85rem;
            font-weight: 600;
            color: white;
            background: var(--primary-color);
            padding: 0.3rem 0.7rem;
            border-radius: 20px;
            box-shadow: 0 2px 4px rgba(74, 144, 226, 0.3);
        }

        .input-group {
            margin-bottom: 1.5rem;
        }

        .input-label {
            color: var(--text-primary);
            margin-bottom: 0.5rem;
            display: block;
            font-weight: 600;
            font-size: 1rem;
        }

        .input-row {
            display: flex;
            gap: 0.75rem;
            flex-wrap: wrap;
        }

        input, textarea {
            background: white;
            border: 2px solid var(--border-color);
            border-radius: 12px;
            padding: 0.85rem 1rem;
            color: var(--text-primary);
            outline: none;
            transition: all 0.2s;
            width: 100%;
            font-size: 1rem;
            font-weight: 400;
            box-shadow: 0 2px 4px var(--shadow-light);
        }

        input::placeholder, textarea::placeholder {
            color: var(--text-light);
            font-weight: 400;
        }

        input:focus, textarea:focus {
            border-color: var(--primary-color);
            box-shadow: 0 0 0 3px rgba(74, 144, 226, 0.15);
        }

        .input-row input {
            flex: 1;
            min-width: 150px;
        }

        .btn {
            padding: 0.85rem 1.25rem;
            border: none;
            border-radius: 12px;
            font-weight: 600;
            cursor: pointer;
            transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
            display: inline-flex;
            align-items: center;
            justify-content: center;
            gap: 0.5rem;
            text-decoration: none;
            user-select: none;
            white-space: nowrap;
            font-size: 0.95rem;
            position: relative;
            box-shadow: 0 4px 6px var(--shadow-light);
            touch-action: manipulation;
        }

        .btn::after {
            content: '';
            position: absolute;
            top: -4px;
            left: -4px;
            right: -4px;
            bottom: -4px;
            border: 2px solid var(--primary-color);
            border-radius: 14px;
            opacity: 0;
            transition: opacity 0.2s;
        }

        .btn.highlight::after {
            opacity: 1;
        }

        .btn:disabled {
            opacity: 0.6;
            cursor: not-allowed;
            transform: none !important;
            box-shadow: none !important;
        }

        .btn:active:not(:disabled) {
            transform: scale(0.96);
        }

        .btn-primary {
            background: linear-gradient(135deg, var(--primary-color) 0%, var(--primary-light) 100%);
            color: white;
        }

        .btn-primary:hover:not(:disabled) {
            background: linear-gradient(135deg, var(--primary-dark) 0%, var(--primary-color) 100%);
            box-shadow: 0 6px 12px rgba(74, 144, 226, 0.3);
            transform: translateY(-1px);
        }

        .btn-success {
            background: linear-gradient(135deg, var(--secondary-color) 0%, #66d98a 100%);
            color: white;
        }

        .btn-success:hover:not(:disabled) {
            background: linear-gradient(135deg, #40b368 0%, var(--secondary-color) 100%);
            box-shadow: 0 6px 12px rgba(80, 200, 120, 0.3);
            transform: translateY(-1px);
        }

        .btn-secondary {
            background: white;
            color: var(--text-primary);
            border: 2px solid var(--border-color);
        }

        .btn-secondary:hover:not(:disabled) {
            background: var(--bg-secondary);
            border-color: var(--primary-color);
            box-shadow: 0 4px 8px var(--shadow-light);
            transform: translateY(-1px);
        }

        .btn-danger {
            background: linear-gradient(135deg, var(--danger-color) 0%, #ff8787 100%);
            color: white;
        }

        .btn-danger:hover:not(:disabled) {
            background: linear-gradient(135deg, #ff5252 0%, var(--danger-color) 100%);
            box-shadow: 0 6px 12px rgba(255, 107, 107, 0.3);
            transform: translateY(-1px);
        }

        .btn-warning {
            background: linear-gradient(135deg, var(--warning-color) 0%, #ffb74d 100%);
            color: white;
        }

        .btn-warning:hover:not(:disabled) {
            background: linear-gradient(135deg, #ff9800 0%, var(--warning-color) 100%);
            box-shadow: 0 6px 12px rgba(255, 167, 38, 0.3);
            transform: translateY(-1px);
        }

        .punishment-list {
            max-height: 400px;
            overflow-y: auto;
            margin-bottom: 1.5rem;
            padding-right: 0.5rem;
        }

        .punishment-list::-webkit-scrollbar {
            width: 6px;
        }
        .punishment-list::-webkit-scrollbar-track {
            background: #f1f1f1;
            border-radius: 3px;
        }
        .punishment-list::-webkit-scrollbar-thumb {
            background: #c1c1c1;
            border-radius: 3px;
        }
        .punishment-list::-webkit-scrollbar-thumb:hover {
            background: #a8a8a8;
        }

        .punishment-item {
            background: white;
            padding: 1rem;
            border-radius: 12px;
            margin-bottom: 0.75rem;
            display: flex;
            justify-content: space-between;
            align-items: center;
            transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
            color: var(--text-primary);
            border: 2px solid transparent;
            box-shadow: 0 2px 4px var(--shadow-light);
        }

        .punishment-item:hover {
            background: #f9f9f9;
            transform: translateX(4px);
            box-shadow: 0 4px 8px var(--shadow-light);
        }

        .punishment-item.active {
            background: rgba(74, 144, 226, 0.08);
            border-color: var(--primary-color);
            font-weight: 600;
            box-shadow: 0 0 0 3px rgba(74, 144, 226, 0.1);
        }

        .punishment-item .remove-btn {
            background: transparent;
            border: 2px solid var(--border-color);
            color: var(--text-light);
            cursor: pointer;
            font-size: 1.2rem;
            width: 32px;
            height: 32px;
            border-radius: 50%;
            display: flex;
            align-items: center;
            justify-content: center;
            transition: all 0.2s;
            flex-shrink: 0;
            touch-action: manipulation;
        }

        .punishment-item .remove-btn:hover {
            background: var(--danger-color);
            border-color: var(--danger-color);
            color: white;
            transform: scale(1.1);
        }

        .wheel-container {
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            width: 100%;
        }

        .wheel-wrapper {
            position: relative;
            margin-bottom: 2rem;
            width: 100%;
            max-width: 450px;
            aspect-ratio: 1/1;
            filter: drop-shadow(0 8px 16px var(--shadow-medium));
        }

        .wheel-pointer {
            position: absolute;
            top: -18px;
            left: 50%;
            transform: translateX(-50%);
            z-index: 20;
            width: 48px;
            height: 48px;
            background: linear-gradient(135deg, var(--accent-color) 0%, #ffa726 100%);
            border: 4px solid white;
            border-radius: 50%;
            box-shadow: 0 6px 12px var(--shadow-heavy);
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 1.4rem;
        }

        .wheel-pointer::after {
            content: '';
            position: absolute;
            top: 100%;
            left: 50%;
            transform: translateX(-50%);
            border-left: 12px solid transparent;
            border-right: 12px solid transparent;
            border-top: 18px solid var(--accent-color);
            filter: drop-shadow(0 4px 4px var(--shadow-medium));
        }

        .wheel-svg {
            width: 100%;
            height: 100%;
            transition-property: transform;
            transition-timing-function: cubic-bezier(0.17, 0.67, 0.12, 0.99);
        }

        .control-buttons {
            display: flex;
            gap: 1rem;
            margin-bottom: 2rem;
            flex-wrap: wrap;
            justify-content: center;
        }

        .result-display {
            background: white;
            border: 3px solid var(--primary-color);
            color: var(--text-primary);
            padding: 1.5rem 2.5rem;
            border-radius: 16px;
            text-align: center;
            font-weight: 600;
            box-shadow: 0 8px 24px var(--shadow-medium);
            min-width: 280px;
            max-width: 100%;
            transform: scale(0.9);
            opacity: 0;
            transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
        }

        .result-display.show {
            transform: scale(1);
            opacity: 1;
            animation: bounce 0.6s ease;
        }

        .result-display h3 {
            font-size: 1.3rem;
            margin-bottom: 0.5rem;
            color: var(--text-primary);
        }

        .result-display .punishment-text {
            font-size: 1.8rem;
            font-weight: 800;
            word-break: break-word;
            line-height: 1.4;
            color: var(--primary-color);
        }

        .celebration-modal {
            position: fixed;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
            background: rgba(0, 0, 0, 0.6);
            z-index: 50;
            display: flex;
            align-items: center;
            justify-content: center;
            padding: 1rem;
            backdrop-filter: blur(4px);
        }

        .celebration-content {
            background: white;
            border-radius: 24px;
            padding: 2.5rem;
            max-width: 32rem;
            width: 100%;
            text-align: center;
            position: relative;
            box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
            border: 1px solid rgba(255, 255, 255, 0.2);
        }

        .celebration-close {
            position: absolute;
            top: 1rem;
            right: 1rem;
            width: 2.8rem;
            height: 2.8rem;
            background: #f8f9fa;
            border: 2px solid var(--border-color);
            border-radius: 50%;
            color: var(--text-secondary);
            cursor: pointer;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 1.5rem;
            transition: all 0.2s;
            font-weight: 300;
            touch-action: manipulation;
        }

        .celebration-close:hover {
            background: var(--danger-color);
            border-color: var(--danger-color);
            color: white;
            transform: scale(1.1);
        }

        .celebration-inner {
            position: relative;
        }

        .celebration-emoji {
            font-size: 5rem;
            margin-bottom: 1rem;
            display: block;
            animation: bounce 1s ease infinite;
        }

        .celebration-title {
            font-size: 2rem;
            font-weight: 800;
            color: var(--text-primary);
            margin-bottom: 1.5rem;
            background: linear-gradient(135deg, var(--primary-color) 0%, var(--accent-color) 100%);
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
            background-clip: text;
        }

        .celebration-result-box {
            background: linear-gradient(135deg, var(--bg-secondary) 0%, white 100%);
            border-radius: 16px;
            padding: 2rem;
            margin-bottom: 2rem;
            border: 2px solid var(--border-color);
            box-shadow: inset 0 2px 4px var(--shadow-light);
        }

        .celebration-result-label {
            font-size: 1.1rem;
            color: var(--text-secondary);
            margin-bottom: 0.5rem;
            font-weight: 600;
        }

        .celebration-result-text {
            font-size: 2rem;
            font-weight: 800;
            color: var(--primary-color);
            line-height: 1.3;
        }

        .celebration-btn {
            background: linear-gradient(135deg, var(--primary-color) 0%, var(--primary-light) 100%);
            color: white;
            border: none;
            padding: 1rem 3rem;
            border-radius: 12px;
            font-weight: 700;
            font-size: 1.1rem;
            cursor: pointer;
            transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
            box-shadow: 0 6px 12px rgba(74, 144, 226, 0.3);
            touch-action: manipulation;
        }

        .celebration-btn:hover {
            background: linear-gradient(135deg, var(--primary-dark) 0%, var(--primary-color) 100%);
            box-shadow: 0 8px 16px rgba(74, 144, 226, 0.4);
            transform: translateY(-2px);
        }

        .celebration-btn:active {
            transform: scale(0.96);
        }

        .empty-state {
            padding: 3rem 2rem;
            border-radius: 12px;
            background: var(--bg-secondary);
            color: var(--text-light);
            text-align: center;
            border: 2px dashed var(--border-color);
            font-size: 1.1rem;
        }

        .file-import-note {
            color: var(--text-secondary);
            font-size: 0.85rem;
            margin-top: 0.5rem;
            display: flex;
            align-items: center;
            gap: 0.5rem;
        }

        .clear-all-section {
            display: flex;
            justify-content: flex-end;
            margin-top: 1.5rem;
            padding-top: 1.5rem;
            border-top: 1px solid var(--border-color);
        }

        .confirm-clear-modal {
            position: fixed;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
            background: rgba(0, 0, 0, 0.6);
            z-index: 100;
            display: flex;
            align-items: center;
            justify-content: center;
            padding: 1rem;
            backdrop-filter: blur(4px);
        }

        .confirm-clear-content {
            background: white;
            border-radius: 24px;
            padding: 2.5rem;
            max-width: 28rem;
            width: 100%;
            text-align: center;
            position: relative;
            box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
            border: 1px solid rgba(255, 255, 255, 0.2);
        }

        .confirm-clear-icon {
            font-size: 4rem;
            margin-bottom: 1rem;
            display: block;
            color: var(--warning-color);
        }

        .confirm-clear-title {
            font-size: 1.8rem;
            font-weight: 800;
            color: var(--text-primary);
            margin-bottom: 1rem;
        }

        .confirm-clear-message {
            font-size: 1rem;
            color: var(--text-secondary);
            margin-bottom: 2rem;
            line-height: 1.6;
        }

        .confirm-clear-count {
            font-weight: 800;
            color: var(--danger-color);
            font-size: 1.3rem;
        }

        .confirm-clear-buttons {
            display: flex;
            gap: 1rem;
            justify-content: center;
            flex-wrap: wrap;
        }

        .confirm-clear-btn {
            padding: 0.85rem 2rem;
            border: none;
            border-radius: 12px;
            font-weight: 600;
            font-size: 1rem;
            cursor: pointer;
            transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
            min-width: 120px;
            touch-action: manipulation;
        }

        .confirm-clear-btn.confirm {
            background: linear-gradient(135deg, var(--secondary-color) 0%, #66d98a 100%);
            color: white;
            box-shadow: 0 4px 8px rgba(80, 200, 120, 0.3);
        }

        .confirm-clear-btn.confirm:hover {
            background: linear-gradient(135deg, #40b368 0%, var(--secondary-color) 100%);
            box-shadow: 0 6px 12px rgba(80, 200, 120, 0.4);
            transform: translateY(-1px);
        }

        .confirm-clear-btn.cancel {
            background: white;
            color: var(--text-primary);
            border: 2px solid var(--border-color);
            box-shadow: 0 2px 4px var(--shadow-light);
        }

        .confirm-clear-btn.cancel:hover {
            background: var(--bg-secondary);
            border-color: var(--primary-color);
            box-shadow: 0 4px 8px var(--shadow-light);
            transform: translateY(-1px);
        }

        @keyframes bounce {
            0%, 20%, 53%, 80%, 100% { transform: translateY(0); }
            40%, 43% { transform: translateY(-12px); }
            70% { transform: translateY(-6px); }
            90% { transform: translateY(-3px); }
        }

        @keyframes modalPop {
            0% { transform: scale(0.85) translateY(30px); opacity: 0; }
            100% { transform: scale(1) translateY(0); opacity: 1; }
        }

        @keyframes pulse {
            0% { transform: scale(1); }
            50% { transform: scale(1.08); }
            100% { transform: scale(1); }
        }

        .hidden {
            display: none !important;
        }

        .modal-enter {
            animation: modalPop 0.4s cubic-bezier(0.4, 0, 0.2, 1) forwards;
        }

        .pulse {
            animation: pulse 0.6s ease;
        }

        /* 移动端深度优化 */
        @media (max-width: 768px) {
            body {
                padding: 0.75rem;
            }

            .panel {
                padding: 1.25rem;
                border-radius: 16px;
            }

            .header h1 {
                font-size: clamp(1.5rem, 6vw, 2.2rem);
            }

            .header p {
                font-size: 1rem;
            }

            .shortcut-hint {
                font-size: 0.85rem;
                padding: 0.35rem 0.7rem;
            }

            .control-buttons {
                flex-direction: column;
                align-items: stretch;
                width: 100%;
                max-width: 350px;
            }

            .btn {
                width: 100%;
                padding: 1rem;
                font-size: 1rem;
            }

            .celebration-content {
                padding: 2rem 1.5rem;
                border-radius: 20px;
            }

            .celebration-title {
                font-size: 1.6rem;
            }

            .celebration-emoji {
                font-size: 4rem;
            }

            .celebration-result-text {
                font-size: 1.6rem;
            }

            .celebration-result-box {
                padding: 1.5rem;
            }

            .confirm-clear-content {
                padding: 2rem 1.5rem;
                border-radius: 20px;
            }

            .confirm-clear-title {
                font-size: 1.5rem;
            }

            .wheel-wrapper {
                max-width: 380px;
            }

            .result-display {
                padding: 1.25rem 1.5rem;
                min-width: auto;
                width: 100%;
                max-width: 350px;
            }

            .result-display .punishment-text {
                font-size: 1.5rem;
            }

            .punishment-item {
                padding: 0.85rem;
            }

            .punishment-item .remove-btn {
                width: 30px;
                height: 30px;
                font-size: 1.1rem;
            }

            .input-row {
                flex-direction: column;
            }

            .input-row input {
                min-width: auto;
            }

            .panel-header {
                flex-direction: column;
                align-items: flex-start;
            }

            .panel-header .btn {
                width: auto;
                align-self: flex-end;
            }
        }

        /* 超小屏幕优化 */
        @media (max-width: 360px) {
            .wheel-wrapper {
                max-width: 300px;
            }

            .celebration-content, .confirm-clear-content {
                padding: 1.5rem 1rem;
            }

            .celebration-title {
                font-size: 1.4rem;
            }

            .celebration-result-text {
                font-size: 1.4rem;
            }
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class="container"&gt;
        &lt;!-- 头部标题 --&gt;
        &lt;div class="header"&gt;
            &lt;h1&gt;🍽️ 美食大转盘&lt;/h1&gt;
            &lt;p&gt;还在为"吃什么"发愁吗？让转盘帮你决定今天的美食！&lt;/p&gt;
            &lt;div class="shortcut-hint"&gt;💡 提示：按空格键可以快速开始点餐&lt;/div&gt;
        &lt;/div&gt;

        &lt;div class="main-grid"&gt;
            &lt;!-- 菜品管理面板 --&gt;
            &lt;div class="panel list-panel"&gt;
                &lt;div class="panel-header"&gt;
                    &lt;div style="display: flex; align-items: center; gap: 0.5rem;"&gt;
                        &lt;h2&gt;📋 我的美食菜单&lt;/h2&gt;
                        &lt;div class="count-badge" id="punishmentCount"&gt;0项&lt;/div&gt;
                    &lt;/div&gt;
                    &lt;button class="btn btn-danger" id="clearAllPunishmentsBtn"&gt;
                        🗑️ 一键清空
                    &lt;/button&gt;
                &lt;/div&gt;

                &lt;div class="input-group"&gt;
                    &lt;label class="input-label"&gt;添加新菜品：&lt;/label&gt;
                    &lt;div class="input-row"&gt;
                        &lt;input type="text" id="punishmentInput" placeholder="例如：麻辣香锅、披萨、寿司..." autocomplete="off"&gt;
                        &lt;button class="btn btn-primary" id="addPunishmentBtn"&gt;
                            ➕ 添加
                        &lt;/button&gt;
                    &lt;/div&gt;
                &lt;/div&gt;

                &lt;!-- 文件导入功能 --&gt;
                &lt;div class="input-group"&gt;
                    &lt;label class="input-label"&gt;导入菜品列表（TXT文件）：&lt;/label&gt;
                    &lt;div class="input-row"&gt;
                        &lt;input type="file" id="importFile" accept=".txt" style="flex: 1; padding: 0.6rem;"&gt;
                        &lt;button class="btn btn-secondary" id="importBtn"&gt;
                            📁 导入
                        &lt;/button&gt;
                    &lt;/div&gt;
                    &lt;div class="file-import-note"&gt;
                        ℹ️ 每行一个菜品，支持批量导入
                    &lt;/div&gt;
                &lt;/div&gt;

                &lt;div class="punishment-list" id="punishmentList"&gt;
                    &lt;!-- 菜品项目动态加载 --&gt;
                &lt;/div&gt;

                &lt;div class="clear-all-section"&gt;
                    &lt;button class="btn btn-warning" id="resetToDefaultBtn"&gt;
                        🔄 恢复默认菜单
                    &lt;/button&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;!-- 转盘控制面板 --&gt;
            &lt;div class="panel wheel-panel" style="display: flex; flex-direction: column; align-items: center; justify-content: center;"&gt;
                &lt;div class="wheel-container"&gt;
                    &lt;div class="wheel-wrapper"&gt;
                        &lt;!-- 转盘指针 --&gt;
                        &lt;div class="wheel-pointer"&gt;🎯&lt;/div&gt;
                        &lt;!-- SVG转盘 --&gt;
                        &lt;svg id="wheelSvg" class="wheel-svg" viewBox="-250 -250 500 500"&gt;
                            &lt;defs&gt;
                                &lt;radialGradient id="centerGradient"&gt;
                                    &lt;stop offset="0%" stop-color="#ffffff" /&gt;
                                    &lt;stop offset="100%" stop-color="#f0f0f0" /&gt;
                                &lt;/radialGradient&gt;
                                &lt;filter id="shadow" x="-20%" y="-20%" width="140%" height="140%"&gt;
                                    &lt;feDropShadow dx="0" dy="2" stdDeviation="3" flood-color="rgba(0,0,0,0.15)"/&gt;
                                &lt;/filter&gt;
                            &lt;/defs&gt;
                            &lt;!-- 转盘扇形区域（动态生成） --&gt;
                            &lt;g id="wheelSections"&gt;&lt;/g&gt;
                            &lt;!-- 转盘中心装饰 --&gt;
                            &lt;circle cx="0" cy="0" r="50" fill="url(#centerGradient)" stroke="#fff" stroke-width="4" filter="url(#shadow)"/&gt;
                            &lt;circle cx="0" cy="0" r="35" fill="none" stroke="#e0e0e0" stroke-width="2" stroke-dasharray="4 4"/&gt;
                            &lt;text x="0" y="5" fill="#4a90e2" font-size="18" font-weight="bold" text-anchor="middle" dominant-baseline="middle"&gt;点餐&lt;/text&gt;
                        &lt;/svg&gt;
                    &lt;/div&gt;

                    &lt;!-- 控制按钮区域 --&gt;
                    &lt;div class="control-buttons"&gt;
                        &lt;button class="btn btn-primary" id="startBtn" style="min-width: 160px; padding: 1.1rem;"&gt;
                            &lt;span id="startBtnText"&gt;🎰 开始点餐&lt;/span&gt;
                        &lt;/button&gt;
                        &lt;button class="btn btn-secondary" id="resetBtn" style="padding: 1.1rem;"&gt;
                            🔄 重置转盘
                        &lt;/button&gt;
                    &lt;/div&gt;

                    &lt;!-- 结果展示区域 --&gt;
                    &lt;div id="resultDisplay" class="result-display"&gt;
                        &lt;h3&gt;🎉 今日推荐&lt;/h3&gt;
                        &lt;div class="punishment-text" id="winnerPunishment"&gt;等待选择...&lt;/div&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- 庆祝弹窗 --&gt;
    &lt;div id="celebrationModal" class="celebration-modal hidden"&gt;
        &lt;div class="celebration-content"&gt;
            &lt;button class="celebration-close" id="closeCelebrationBtn"&gt;&times;&lt;/button&gt;
            &lt;div class="celebration-inner"&gt;
                &lt;span class="celebration-emoji"&gt;🍽️&lt;/span&gt;
                &lt;h2 class="celebration-title"&gt;今日美食已选定!&lt;/h2&gt;

                &lt;div class="celebration-result-box"&gt;
                    &lt;div class="celebration-result-label"&gt;转盘推荐：&lt;/div&gt;
                    &lt;div class="celebration-result-text" id="celebrationPunishment"&gt;&lt;/div&gt;
                &lt;/div&gt;

                &lt;button class="celebration-btn" id="confirmCelebrationBtn"&gt;
                    ✅ 就吃这个了！
                &lt;/button&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- 一键清空确认弹窗 --&gt;
    &lt;div id="confirmClearModal" class="confirm-clear-modal hidden"&gt;
        &lt;div class="confirm-clear-content modal-enter"&gt;
            &lt;span class="confirm-clear-icon"&gt;⚠️&lt;/span&gt;
            &lt;h2 class="confirm-clear-title"&gt;确认清空菜单&lt;/h2&gt;
            &lt;div class="confirm-clear-message"&gt;
                您确定要清空所有 &lt;span class="confirm-clear-count" id="clearCount"&gt;0&lt;/span&gt; 个菜品吗？&lt;br&gt;
                此操作无法撤销，所有自定义和导入的菜品将被永久删除。
            &lt;/div&gt;
            &lt;div class="confirm-clear-buttons"&gt;
                &lt;button class="confirm-clear-btn cancel" id="cancelClearBtn"&gt;
                    ❌ 取消
                &lt;/button&gt;
                &lt;button class="confirm-clear-btn confirm" id="confirmClearBtn"&gt;
                    ✅ 确定清空
                &lt;/button&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;script&gt;
        // ========== 全局变量声明 ==========

        // 默认菜品列表
        const defaultPunishments = [
            '披萨', 
            '汉堡', 
            '拉面', 
            '寿司', 
            '麻辣香锅', 
            '火锅', 
            '沙拉', 
            '咖喱饭',
            '便当',
            '三明治',
            '意大利面',
            '墨西哥卷饼',
            '饺子',
            '炸虾',
            '冰淇淋'
        ];

        // 从LocalStorage加载数据
        let punishments = JSON.parse(localStorage.getItem('wheelPunishments')) || [...defaultPunishments];

        // 转盘状态控制变量
        let isSpinning = false;
        let currentRotation = 0;
        let currentPunishment = '';

        // 键盘快捷键状态
        let isSpacebarPressed = false;
        let spacebarCooldown = false;

        // 转盘扇形颜色列表 - 现代柔和色调
        const colors = [
            '#4a90e2', '#50c878', '#ff8c42', '#9c5bdf', '#ff6b6b',
            '#20b2aa', '#ffa726', '#7e8c8d', '#e91e63', '#009688',
            '#673ab7', '#ff5722', '#795548', '#607d8b', '#3f51b5',
            '#00bcd4', '#8bc34a', '#ffc107', '#9e9e9e', '#f44336'
        ];

        // ========== 工具函数 ==========

        /**
         * 更新菜品项目计数显示
         */
        function updatePunishmentCount() {
            const countElement = document.getElementById('punishmentCount');
            const count = punishments.length;
            countElement.textContent = `${count}项`;
        }

        /**
         * 保存菜品列表到LocalStorage
         */
        function savePunishments() {
            localStorage.setItem('wheelPunishments', JSON.stringify(punishments));
        }

        /**
         * 显示一键清空确认弹窗
         */
        function showClearConfirmation() {
            if (isSpinning) {
                alert('转盘旋转时不能清空菜品！');
                return;
            }

            if (punishments.length === 0) {
                alert('当前没有菜品可清空！');
                return;
            }

            // 更新清空数量显示
            document.getElementById('clearCount').textContent = punishments.length;

            // 显示确认弹窗
            const modal = document.getElementById('confirmClearModal');
            modal.classList.remove('hidden');
        }

        /**
         * 隐藏一键清空确认弹窗
         */
        function hideClearConfirmation() {
            document.getElementById('confirmClearModal').classList.add('hidden');
        }

        /**
         * 执行一键清空操作
         */
        function clearAllPunishments() {
            if (isSpinning) {
                alert('转盘旋转时不能清空菜品！');
                return;
            }

            // 记录清空前的数量
            const previousCount = punishments.length;

            // 清空菜品列表
            punishments = [];

            // 更新UI
            updatePunishmentList();
            updatePunishmentCount();
            updateWheel();

            // 保存到LocalStorage
            savePunishments();

            // 重置转盘状态
            currentRotation = 0;
            currentPunishment = '';
            const wheelSvg = document.getElementById('wheelSvg');
            wheelSvg.style.transitionDuration = '0ms';
            wheelSvg.style.transform = 'rotate(0deg)';

            // 隐藏结果
            const resultDisplay = document.getElementById('resultDisplay');
            resultDisplay.classList.remove('show');

            // 隐藏庆祝弹窗
            closeCelebration();

            // 显示操作反馈
            alert(`已清空 ${previousCount} 个菜品！`);

            // 隐藏确认弹窗
            hideClearConfirmation();
        }

        /**
         * 恢复默认菜单
         */
        function resetToDefaultMenu() {
            if (isSpinning) {
                alert('转盘旋转时不能恢复默认菜单！');
                return;
            }

            if (!confirm('确定要恢复默认菜单吗？当前所有菜品将被替换为默认菜品。')) {
                return;
            }

            // 恢复默认菜品列表
            punishments = [...defaultPunishments];

            // 更新UI
            updatePunishmentList();
            updatePunishmentCount();
            updateWheel();

            // 保存到LocalStorage
            savePunishments();

            alert('已恢复默认菜单！');
        }

        /**
         * 导入TXT文件并解析菜品列表
         */
        function importPunishmentsFromTxt(file) {
            const reader = new FileReader();

            reader.onload = function(e) {
                try {
                    const content = e.target.result;
                    // 按换行符分割，过滤空行和首尾空格
                    const newPunishments = content.split(/\r?\n/)
                        .map(item =&gt; item.trim())
                        .filter(item =&gt; item.length &gt; 0);

                    if (newPunishments.length === 0) {
                        alert('文件为空或格式不正确！');
                        return;
                    }

                    // 合并并去重
                    const uniqueNewPunishments = newPunishments.filter(
                        item =&gt; !punishments.includes(item)
                    );

                    if (uniqueNewPunishments.length === 0) {
                        alert('所有菜品已存在！');
                        return;
                    }

                    // 添加到现有列表
                    punishments.push(...uniqueNewPunishments);

                    // 更新UI并保存
                    updatePunishmentList();
                    updatePunishmentCount();
                    updateWheel();
                    savePunishments();

                    alert(`成功导入 ${uniqueNewPunishments.length} 个新菜品！${newPunishments.length - uniqueNewPunishments.length &gt; 0 ? `有 ${newPunishments.length - uniqueNewPunishments.length} 个重复菜品已跳过。` : ''}`);

                } catch (error) {
                    console.error('导入文件时出错:', error);
                    alert('文件解析失败，请检查文件格式！');
                }
            };

            reader.onerror = function() {
                alert('读取文件失败！');
            };

            reader.readAsText(file);
        }

        /**
         * 高亮开始按钮（快捷键提示）
         */
        function highlightStartButton() {
            const startBtn = document.getElementById('startBtn');
            startBtn.classList.add('highlight', 'pulse');

            setTimeout(() =&gt; {
                startBtn.classList.remove('pulse');
            }, 600);

            setTimeout(() =&gt; {
                startBtn.classList.remove('highlight');
            }, 1200);
        }

        // ========== DOM加载完成事件 ==========
        document.addEventListener('DOMContentLoaded', function() {
            // 初始化UI
            updatePunishmentList();
            updatePunishmentCount();
            updateWheel();

            // 输入框回车事件
            const input = document.getElementById('punishmentInput');
            input.addEventListener('keypress', function(e) {
                if (e.key === 'Enter') {
                    addPunishment();
                }
            });

            // 绑定按钮事件
            document.getElementById('addPunishmentBtn').addEventListener('click', addPunishment);
            document.getElementById('importBtn').addEventListener('click', function() {
                const fileInput = document.getElementById('importFile');
                if (fileInput.files.length &gt; 0) {
                    importPunishmentsFromTxt(fileInput.files[0]);
                    fileInput.value = ''; // 清空文件选择
                } else {
                    alert('请先选择文件！');
                }
            });

            document.getElementById('startBtn').addEventListener('click', startGame);
            document.getElementById('resetBtn').addEventListener('click', resetWheel);
            document.getElementById('resetToDefaultBtn').addEventListener('click', resetToDefaultMenu);
            document.getElementById('closeCelebrationBtn').addEventListener('click', closeCelebration);
            document.getElementById('confirmCelebrationBtn').addEventListener('click', closeCelebration);

            // 一键清空相关事件
            document.getElementById('clearAllPunishmentsBtn').addEventListener('click', showClearConfirmation);
            document.getElementById('cancelClearBtn').addEventListener('click', hideClearConfirmation);
            document.getElementById('confirmClearBtn').addEventListener('click', clearAllPunishments);

            // 点击确认弹窗外部关闭弹窗
            document.getElementById('confirmClearModal').addEventListener('click', function(e) {
                if (e.target === this) {
                    hideClearConfirmation();
                }
            });

            // 点击庆祝弹窗外部关闭弹窗
            document.getElementById('celebrationModal').addEventListener('click', function(e) {
                if (e.target === this) {
                    closeCelebration();
                }
            });

            // 使用事件委托处理动态生成的删除按钮
            document.getElementById('punishmentList').addEventListener('click', function(e) {
                if (e.target.classList.contains('remove-btn')) {
                    const item = e.target.closest('.punishment-item');
                    const index = Array.from(this.children).indexOf(item);
                    if (index !== -1) {
                        removePunishment(index);
                    }
                }
            });

            // 键盘事件监听 - 空格键开始点餐
            document.addEventListener('keydown', function(e) {
                // 检查是否按下了空格键
                if (e.code === 'Space' || e.key === ' ') {
                    e.preventDefault(); // 防止页面滚动

                    // 检查是否在输入框中
                    const activeElement = document.activeElement;
                    const isInputFocused = activeElement.tagName === 'INPUT' || activeElement.tagName === 'TEXTAREA';

                    // 检查是否有弹窗打开
                    const isModalOpen = !document.getElementById('celebrationModal').classList.contains('hidden') || 
                                       !document.getElementById('confirmClearModal').classList.contains('hidden');

                    // 如果不在输入框中且没有弹窗打开，且转盘没有在旋转
                    if (!isInputFocused &amp;&amp; !isModalOpen &amp;&amp; !isSpinning) {
                        startGame();
                        highlightStartButton();
                    }
                }
            });

            // 添加空格键提示的视觉反馈
            document.addEventListener('keyup', function(e) {
                if (e.code === 'Space' || e.key === ' ') {
                    isSpacebarPressed = false;
                }
            });
        });

        // ========== 核心功能函数 ==========

        /**
         * 添加新菜品项目
         */
        function addPunishment() {
            const input = document.getElementById('punishmentInput');
            const name = input.value.trim();

            // 输入验证
            if (!name) {
                alert('请输入菜品名称！');
                return;
            }

            if (name.length &gt; 30) {
                alert('菜品名称过长，请控制在30字以内！');
                return;
            }

            if (!punishments.includes(name)) {
                punishments.push(name);
                input.value = '';
                input.focus();
                updatePunishmentList();
                updatePunishmentCount();
                updateWheel();
                savePunishments();
            } else {
                alert('该菜品已存在！');
            }
        }

        /**
         * 删除菜品项目
         */
        function removePunishment(index) {
            if (isSpinning) {
                alert('转盘旋转时不能删除菜品！');
                return;
            }

            if (confirm('确定要删除这个菜品吗？')) {
                punishments.splice(index, 1);
                updatePunishmentList();
                updatePunishmentCount();
                updateWheel();
                savePunishments();
            }
        }

        /**
         * 更新菜品列表UI
         */
        function updatePunishmentList() {
            const list = document.getElementById('punishmentList');

            // 处理空列表状态
            if (punishments.length === 0) {
                list.innerHTML = '&lt;div class="empty-state"&gt;🍽️ 菜品菜单是空的，请先添加菜品！&lt;/div&gt;';
                return;
            }

            // 生成列表HTML
            list.innerHTML = punishments.map((punishment, index) =&gt; `
                &lt;div class="punishment-item ${currentPunishment === punishment ? 'active' : ''}"&gt;
                    &lt;span&gt;${punishment}&lt;/span&gt;
                    &lt;button class="remove-btn" title="删除此项"&gt;&times;&lt;/button&gt;
                &lt;/div&gt;
            `).join('');
        }

        /**
         * 更新转盘SVG图形
         */
        function updateWheel() {
            const sectionsGroup = document.getElementById('wheelSections');
            sectionsGroup.innerHTML = '';

            // 空转盘状态
            if (punishments.length === 0) {
                const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
                path.setAttribute('d', 'M 0 0 L 240 0 A 240 240 0 1 1 -240 0 Z');
                path.setAttribute('fill', '#f5f5f5');
                path.setAttribute('stroke', '#e0e0e0');
                path.setAttribute('stroke-width', '2');

                const text = document.createElementNS('http://www.w3.org/2000/svg', 'text');
                text.setAttribute('x', '0');
                text.setAttribute('y', '0');
                text.setAttribute('fill', '#999');
                text.setAttribute('font-size', '24');
                text.setAttribute('font-weight', '500');
                text.setAttribute('text-anchor', 'middle');
                text.setAttribute('dominant-baseline', 'middle');
                text.textContent = '请添加菜品';

                sectionsGroup.appendChild(path);
                sectionsGroup.appendChild(text);
                return;
            }

            // 计算每个扇形的角度
            const sectionAngle = 360 / punishments.length;
            const radius = 240;

            // 生成每个扇形
            punishments.forEach((punishment, index) =&gt; {
                // 计算起始和结束角度（弧度制）
                const startAngle = index * sectionAngle;
                const endAngle = (index + 1) * sectionAngle;

                const startAngleRad = (startAngle * Math.PI) / 180;
                const endAngleRad = (endAngle * Math.PI) / 180;

                // 判断是否为大圆弧
                const largeArcFlag = sectionAngle &gt; 180 ? 1 : 0;

                // 计算弧线起点和终点坐标
                const x1 = Math.cos(startAngleRad) * radius;
                const y1 = Math.sin(startAngleRad) * radius;
                const x2 = Math.cos(endAngleRad) * radius;
                const y2 = Math.sin(endAngleRad) * radius;

                // 构建扇形路径数据
                const pathData = `M 0 0 L ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 1 ${x2} ${y2} Z`;

                // 创建扇形路径元素
                const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
                path.setAttribute('d', pathData);
                path.setAttribute('fill', colors[index % colors.length]);
                path.setAttribute('stroke', '#fff');
                path.setAttribute('stroke-width', '3');
                path.setAttribute('filter', 'url(#shadow)');

                // 计算文本位置
                const midAngle = (startAngle + endAngle) / 2;
                const textRadius = radius * 0.65;
                const textX = Math.cos((midAngle * Math.PI) / 180) * textRadius;
                const textY = Math.sin((midAngle * Math.PI) / 180) * textRadius;

                // 根据项目数量动态调整字体大小
                let fontSize = 20;
                if (punishments.length &gt; 20) fontSize = 12;
                else if (punishments.length &gt; 15) fontSize = 14;
                else if (punishments.length &gt; 10) fontSize = 16;
                else if (punishments.length &gt; 8) fontSize = 18;

                // 创建文本元素
                const text = document.createElementNS('http://www.w3.org/2000/svg', 'text');
                text.setAttribute('x', textX);
                text.setAttribute('y', textY);
                text.setAttribute('fill', '#fff');
                text.setAttribute('font-size', fontSize);
                text.setAttribute('font-weight', '700');
                text.setAttribute('text-anchor', 'middle');
                text.setAttribute('dominant-baseline', 'middle');
                text.setAttribute('transform', `rotate(${midAngle}, ${textX}, ${textY})`);
                text.setAttribute('style', 'text-shadow: 0 1px 2px rgba(0,0,0,0.3);');

                // 智能文本截断处理
                const maxChars = Math.max(3, Math.floor(60 / fontSize));
                let displayText = punishment;
                if (punishment.length &gt; maxChars) {
                    displayText = punishment.substring(0, maxChars) + '..';
                }
                text.textContent = displayText;

                // 添加到SVG
                sectionsGroup.appendChild(path);
                sectionsGroup.appendChild(text);
            });
        }

        /**
         * 开始转盘游戏
         */
        function startGame() {
            // 前置检查
            if (punishments.length === 0) {
                alert('请先添加菜品！');
                return;
            }

            if (isSpinning) return;

            // 设置旋转状态
            isSpinning = true;
            currentPunishment = '';

            // 更新按钮状态
            const startBtn = document.getElementById('startBtn');
            const startBtnText = document.getElementById('startBtnText');
            startBtn.disabled = true;
            startBtnText.textContent = '⏳ 点餐中...';

            // 隐藏上一个结果
            const resultDisplay = document.getElementById('resultDisplay');
            resultDisplay.classList.remove('show');

            // 生成随机动画参数（4-8秒随机时长）
            const randomDuration = 4000 + Math.random() * 4000;

            // 计算最终旋转角度
            const randomDegreeOffset = Math.floor(Math.random() * 360);
            const randomSpins = 6 + Math.floor(Math.random() * 6); // 6-11圈
            const finalRotation = currentRotation + (randomSpins * 360) + randomDegreeOffset;

            // 更新当前角度
            currentRotation = finalRotation;

            // 应用旋转动画
            const wheelSvg = document.getElementById('wheelSvg');
            wheelSvg.style.transitionDuration = `${randomDuration}ms`;
            wheelSvg.style.transform = `rotate(${currentRotation}deg)`;

            // 动画结束后计算结果
            setTimeout(() =&gt; {
                isSpinning = false;

                // 转盘指针固定角度（顶部）
                const POINTER_ANGLE = 270;

                // 计算实际旋转角度
                const actualRotation = currentRotation % 360;

                // 计算指针指向的角度
                let winningAngle = (POINTER_ANGLE - actualRotation);

                // 角度归一化处理
                winningAngle = winningAngle % 360;
                if (winningAngle &lt; 0) {
                    winningAngle += 360;
                }

                // 根据角度计算选中扇形的索引
                const sectionAngle = 360 / punishments.length;
                const winningIndex = Math.floor(winningAngle / sectionAngle);

                // 获取选中的菜品
                currentPunishment = punishments[winningIndex] || punishments[0];

                // 恢复按钮状态
                startBtn.disabled = false;
                startBtnText.textContent = '🎰 再次点餐';

                // 显示结果
                document.getElementById('winnerPunishment').textContent = currentPunishment;
                resultDisplay.classList.add('show');

                // 更新列表高亮
                updatePunishmentList();

                // 显示庆祝弹窗
                showCelebration();
            }, randomDuration);
        }

        /**
         * 重置转盘
         */
        function resetWheel() {
            if (isSpinning) {
                alert('转盘旋转时不能重置！');
                return;
            }

            if (!confirm('确定要重置转盘吗？')) return;

            currentRotation = 0;
            currentPunishment = '';

            // 立即重置转盘
            const wheelSvg = document.getElementById('wheelSvg');
            wheelSvg.style.transitionDuration = '0ms';
            wheelSvg.style.transform = 'rotate(0deg)';

            // 隐藏结果
            const resultDisplay = document.getElementById('resultDisplay');
            resultDisplay.classList.remove('show');

            // 更新UI
            updatePunishmentList();
            closeCelebration();
        }

        /**
         * 显示庆祝弹窗
         */
        function showCelebration() {
            const modal = document.getElementById('celebrationModal');
            document.getElementById('celebrationPunishment').textContent = currentPunishment;

            // 显示并添加动画
            modal.classList.remove('hidden');
            const content = modal.querySelector('.celebration-content');
            content.classList.remove('modal-enter');
            void content.offsetWidth; // 触发重排
            content.classList.add('modal-enter');
        }

        /**
         * 关闭庆祝弹窗
         */
        function closeCelebration() {
            document.getElementById('celebrationModal').classList.add('hidden');
        }
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>]]></description>
    <pubDate>Tue, 12 May 2026 23:23:33 +0800</pubDate>
    <dc:creator>墨桅</dc:creator>
    <guid>https://www.jetmast.com/web-code/1868.html</guid>
</item>
<item>
    <title>推荐一个全能免费工具站：ToolFk，100 + 实用功能直接替代 90% 付费软件，办公效率直接拉满！</title>
    <link>https://www.jetmast.com/thinking-bookmark/1867.html</link>
    <description><![CDATA[<div>还在为各种付费的工具软件发愁吗？今天给大家安利一个 &ldquo;神仙级&rdquo; 免费工具站 &mdash;&mdash;<strong>ToolFk</strong>。它内置 100 多种实用功能，从 AI 创作到格式转换，从编程工具到日常查询，几乎能替代市面上 90% 的付费软件，关键还<strong>全部免费、无需登录、打开即用</strong>！</div>
<div>&nbsp;</div>
<h2>一、100 + 功能覆盖全场景，你需要的工具它都有</h2>
<div>&nbsp;</div>
<div>这个网站的功能丰富到离谱，不管是办公、学习还是创作，都能找到对应的工具：</div>
<div>&nbsp;</div>
<ul>
<li><strong>AI 创作类</strong>：AI 图像生成、AI 文章生成、AI 图像转视频，让你轻松搞定创意内容；</li>
<li><strong>格式转换类</strong>：PDF 转 Word、PDF 转 PPT、Excel 转 PDF 等超强大格式转换工具，再也不用为格式不兼容头疼；</li>
<li><strong>实用工具类</strong>：思维导图制作、图片美化、在线 PS，满足设计和思维整理需求；</li>
<li><strong>编程开发类</strong>：Java 在线编辑器、Python 添加与加密工具、JavaScript 工具，开发者直接在线写代码；</li>
<li><strong>日常查询类</strong>：邮价查询、中国银行查询、IP 地址查询等几十种生活和工作查询功能，一应俱全。</li>
</ul>
<div>&nbsp;</div>
<h2>二、完全免费无套路，打开就能用</h2>
<div>&nbsp;</div>
<ul>
<li><strong>无需注册登录</strong>：直接打开网站就能使用所有功能，没有任何弹窗广告和使用限制；</li>
<li><strong>功能全部免费</strong>：不管是 AI 生成、格式转换还是编程工具，所有功能都免费开放，不用花一分钱；</li>
<li><strong>操作零门槛</strong>：界面简洁明了，每个工具都有清晰的使用说明，小白也能轻松上手。</li>
</ul>
<div>&nbsp;</div>
<h2>三、适用人群广泛，效率直接翻倍</h2>
<div>&nbsp;</div>
<ul>
<li><strong>职场人</strong>：用它处理格式转换、制作思维导图，办公效率直接拉满；</li>
<li><strong>创作者</strong>：AI 图像、文章生成工具帮你快速产出内容，创意灵感不卡壳；</li>
<li><strong>开发者</strong>：在线编程工具随时写代码、测脚本，不用再装厚重的开发软件；</li>
<li><strong>学生党</strong>：格式转换、学习工具助力高效学习，查邮价、查信息也很方便。</li>
</ul>
<div>&nbsp;</div>
<div>写在最后
<div>&nbsp;</div>
如果你还在被各种付费工具割韭菜，ToolFk 绝对是你的救星！它把 100 多种实用工具全部免费打包，不管你是办公、创作还是学习，都能在这里找到趁手的 &ldquo;兵器&rdquo;。赶紧收藏起来，从此和付费工具说再见，效率直接起飞～</div>
<div>
<p><a href="http://img.jetmast.com/upload/2026/05/202605111104527N2qY2.png" target="_blank" rel="noopener"><img src="http://img.jetmast.com/upload/2026/05/202605111104527N2qY2.png" alt="image.png"></a></p>
</div>]]></description>
    <pubDate>Mon, 11 May 2026 11:04:05 +0800</pubDate>
    <dc:creator>墨桅</dc:creator>
    <guid>https://www.jetmast.com/thinking-bookmark/1867.html</guid>
</item>
<item>
    <title>推荐一个 UI 设计 + 前端开发神器：GemDesign，一句话生成高保真界面 + 可下载代码，设计师和开发者狂喜！</title>
    <link>https://www.jetmast.com/thinking-bookmark/1866.html</link>
    <description><![CDATA[<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div dir="ltr">
<div>还在为 UI 设计和前端开发的繁琐流程头疼吗？今天给大家安利一个 &ldquo;离谱级&rdquo; 效率工具 &mdash;&mdash;<strong>GemDesign</strong>。它能让你用<strong>一句话</strong>生成高保真 APP 界面、网站原型，甚至直接导出前端代码，设计师和开发者用它效率直接翻倍！</div>
<div>&nbsp;</div>
<h2>一、一句话生成高保真界面，设计小白也能出专业稿</h2>
<div>&nbsp;</div>
<div>这个网站最绝的地方，就是 **&ldquo;自然语言描述&rarr;AI 自动生成界面&rdquo;** 的傻瓜式操作：</div>
<div>&nbsp;</div>
<ul>
<li>想设计一款聊天 APP？输入 &ldquo;帮我设计一个简约风格的聊天软件，包含联系人列表、聊天界面、个人中心&rdquo;，它会直接生成多页面的高保真 UI，界面整洁度和专业设计师出品几乎无差；</li>
<li>生成的界面还支持<strong>手动精细化调整</strong>：按钮大小、颜色、文字排版，甚至交互逻辑，都能在界面上直接点击修改，不用再依赖复杂的设计软件；</li>
<li>要是对初稿不满意，在输入框里补充 &ldquo;把整体主色调换成红色，按钮样式改成圆角&rdquo;，AI 会立刻按照要求迭代优化，直到你满意为止。</li>
</ul>
<div>&nbsp;</div>
<h2>二、网站设计也能一键生成，多端适配直接用</h2>
<div>&nbsp;</div>
<div>它不仅能做 APP 界面，<strong>网站设计同样能打</strong>：</div>
<div>&nbsp;</div>
<ul>
<li>比如你想做一个潮流时尚服装网站，输入 &ldquo;帮我设计一个红黑现代风的潮流时尚服装网站，包含首页、分类页、商品详情页&rdquo;，再选择喜欢的风格模板（如红黑现代风），点击生成；</li>
<li>它会<strong>自动完成从界面到交互的全流程设计</strong>，生成的网站不仅适配电脑端，手机端的响应式布局也会同步做好，不用再单独调试移动端界面；</li>
<li>不管是电商网站、企业官网还是个人博客，只要你能描述清楚需求，它都能快速产出可用的视觉原型。</li>
</ul>
<div>&nbsp;</div>
<h2>三、直接导出前端代码，开发者直接抄作业</h2>
<div>&nbsp;</div>
<div>最让开发者惊喜的是，它能<strong>一键导出可复用的前端代码</strong>：</div>
<div>&nbsp;</div>
<ul>
<li>生成界面后，点击 &ldquo;代码&rdquo; 按钮，就能看到完整的 HTML、CSS、JavaScript 代码，直接复制到项目里就能用；</li>
<li>还支持导出到 Axure、Figma 等专业设计工具，设计师和开发者的协作流程被直接打通，再也不用反复沟通 &ldquo;还原度&rdquo; 问题；</li>
<li>对于前端新手来说，这更是学习前端开发的绝佳参考，能直观看到界面和代码的对应关系。</li>
</ul>
<div>&nbsp;</div>
<h2>四、适用人群广泛，效率直接拉满</h2>
<div>&nbsp;</div>
<ul>
<li><strong>设计师</strong>：快速出原型稿、测试不同风格方案，把精力放在创意上，而非软件操作上；</li>
<li><strong>开发者</strong>：省去界面搭建的繁琐工作，直接拿生成的代码进行功能开发，效率翻倍；</li>
<li><strong>创业者 / 个体户</strong>：不用请设计师和前端，自己就能快速做出 APP 或网站原型，验证创业想法；</li>
<li><strong>学生党</strong>：学习 UI 设计和前端开发的辅助工具，直观理解界面和代码的关联。</li>
</ul>
<div>&nbsp;</div>
<div>写在最后
<div>&nbsp;</div>
如果你是设计师或开发者，还在被重复的界面搭建、代码编写消耗精力，GemDesign 绝对是你的效率救星！它用 AI 打破了设计和开发的壁垒，让 &ldquo;一句话生成专业界面 + 可复用代码&rdquo; 成为现实。赶紧去试试，体验一下什么叫 &ldquo;离谱级&rdquo; 的效率提升～</div>
<div>
<p><a href="http://img.jetmast.com/upload/2026/05/202605111054127NQNoX.png" target="_blank" rel="noopener"><img src="http://img.jetmast.com/upload/2026/05/202605111054127NQNoX.png" alt="image.png"></a></p>
<p><a href="http://img.jetmast.com/upload/2026/05/202605111054307NrLgo.png" target="_blank" rel="noopener"><img src="http://img.jetmast.com/upload/2026/05/202605111054307NrLgo.png" alt="image.png"></a></p>
<p><a href="http://img.jetmast.com/upload/2026/05/202605111054427Nh9pY.png" target="_blank" rel="noopener"><img src="http://img.jetmast.com/upload/2026/05/202605111054427Nh9pY.png" alt="image.png"></a></p>
<p><a href="http://img.jetmast.com/upload/2026/05/202605111055037NUBtl.png" target="_blank" rel="noopener"><img src="http://img.jetmast.com/upload/2026/05/202605111055037NUBtl.png" alt="image.png"></a></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>]]></description>
    <pubDate>Mon, 11 May 2026 10:52:23 +0800</pubDate>
    <dc:creator>墨桅</dc:creator>
    <guid>https://www.jetmast.com/thinking-bookmark/1866.html</guid>
</item>
<item>
    <title>推荐一个万物原理科普神器：Animagraffs，用精美动画 + 3D 模型，把复杂知识拆解得明明白白！</title>
    <link>https://www.jetmast.com/thinking-bookmark/1865.html</link>
    <description><![CDATA[<div>还在为晦涩的机械原理、生物构造发愁吗？今天给大家安利一个堪称 &ldquo;视觉化科普天花板&rdquo; 的神级网站 &mdash;&mdash;<strong>Animagraffs</strong>。它用超精美的动画和 3D 模型，把从机械到生物的万物工作原理拆解演示，复杂知识一看就懂，不管是学生做科普、老师做教学，还是普通人涨知识，都能在这里找到惊喜！</div>
<div>&nbsp;</div>
<h2>一、用动画 + 3D 模型，把 &ldquo;看不懂&rdquo; 变成 &ldquo;秒理解&rdquo;</h2>
<div>&nbsp;</div>
<div>这个网站最绝的地方，就是<strong>把抽象的原理变成具象的动态演示</strong>：</div>
<div>&nbsp;</div>
<ul>
<li>想了解唱片机怎么工作？它用 3D 模型展示内部结构，你可以随意旋转、放大，每个零件的运动逻辑都有动画演示，底部还有详细文字解释，生怕你看不懂；</li>
<li>想搞懂发动机的工作原理？它用分步骤动画展示活塞、曲轴的联动，甚至能看到燃油燃烧的过程，用来做教学演示简直酷到没朋友；</li>
<li>从喷气式发动机的内部气流，到枪械的击发机制，从显示器的像素成像原理，到硬盘的数据读写过程，所有复杂机械的 &ldquo;黑箱&rdquo; 都被它拆解得清清楚楚。</li>
</ul>
<div>&nbsp;</div>
<h2>二、覆盖全领域，从机械到生物都能学</h2>
<div>&nbsp;</div>
<div>它的科普范围远超你的想象，几乎涵盖了 &ldquo;万物&rdquo; 的工作原理：</div>
<div>&nbsp;</div>
<ul>
<li><strong>机械工程</strong>：消防车、赛车、缝纫机、电吉他等各类机械的内部构造和运行逻辑；</li>
<li><strong>交通工具</strong>：F1 赛车、喷气式飞机、汽车发动机的核心原理；</li>
<li><strong>电子设备</strong>：硬盘、显示器、唱片机等电子产品的技术细节；</li>
<li><strong>生物构造</strong>：人眼的眼球结构、视觉成像原理，甚至能看到眼球肌肉的运动机制。</li>
</ul>
<div>&nbsp;</div>
<h2>三、交互感拉满，学习体验堪比 &ldquo;玩游戏&rdquo;</h2>
<div>&nbsp;</div>
<div>网站的交互设计让学习充满乐趣：</div>
<div>&nbsp;</div>
<ul>
<li><strong>3D 模型可操作</strong>：所有模型支持旋转、缩放，你可以从任意角度观察细节，比如把唱片机拆到只剩核心零件，再一步步组装回去；</li>
<li><strong>动画分步演示</strong>：复杂原理会拆分成多个步骤动画，比如发动机的四冲程过程，每一步都有标注和说明，逻辑链清晰到极致；</li>
<li><strong>知识点标注</strong>：每个零件、每个运动环节都有文字标注，专业术语也会用通俗语言解释，完全不用担心 &ldquo;术语壁垒&rdquo;。</li>
</ul>
<div>&nbsp;</div>
<h2>四、免费无广告，学习 &amp; 教学都能用</h2>
<div>&nbsp;</div>
<ul>
<li><strong>完全免费</strong>：所有动画和模型都可以免费浏览，没有广告弹窗，学习体验纯粹；</li>
<li><strong>场景适配广</strong>：学生可以用来攻克理科难点，老师可以用来做课堂演示，科普爱好者能用来拓展知识面，甚至工业从业者也能用来研究设备原理；</li>
<li><strong>支持多端访问</strong>：电脑、平板、手机都能打开，不管是在家深度学习，还是通勤路上碎片化科普，都很方便。</li>
</ul>
<div>&nbsp;</div>
<div>写在最后
<div>&nbsp;</div>
如果你想把 &ldquo;枯燥的原理&rdquo; 变成 &ldquo;有趣的探索&rdquo;，Animagraffs 绝对是你的首选！它用视觉化的方式打破了知识的晦涩壁垒，让学习从 &ldquo;硬啃&rdquo; 变成 &ldquo;沉浸式体验&rdquo;。赶紧去网站逛逛，看看那些你好奇已久的 &ldquo;万物原理&rdquo;，是怎么被它用动画讲明白的～</div>
<div>
<p><a href="http://img.jetmast.com/upload/2026/05/202605111018527NtQE7.png" target="_blank" rel="noopener"><img src="http://img.jetmast.com/upload/2026/05/202605111018527NtQE7.png" alt="image.png"></a></p>
</div>]]></description>
    <pubDate>Mon, 11 May 2026 10:14:52 +0800</pubDate>
    <dc:creator>墨桅</dc:creator>
    <guid>https://www.jetmast.com/thinking-bookmark/1865.html</guid>
</item>
<item>
    <title>推荐一个全球在线课程宝库：Class Central，1300 + 名校 25 万门课免费学，还能拿证书！</title>
    <link>https://www.jetmast.com/thinking-bookmark/1864.html</link>
    <description><![CDATA[<div>还在为找不到优质的在线课程发愁吗？今天给大家安利一个堪称 &ldquo;全球在线教育百科全书&rdquo; 的神级网站 &mdash;&mdash;<strong>Class Central</strong>。它收录了全球 1300 多所知名院校、1700 多家企业的 25 万 + 门在线课程，从计算机编程到人文艺术，从职场技能到考研考证，所有学习需求一站式满足，关键很多课程还能免费获得官方证书！</div>
<div>&nbsp;</div>
<h2>一、全球最大在线课程聚合平台，25 万门课一网打尽</h2>
<div>&nbsp;</div>
<div>它是目前全球规模最大的在线课程搜索引擎和聚合平台，收录的资源量堪称恐怖：</div>
<div>&nbsp;</div>
<ul>
<li><strong>名校课程全覆盖</strong>：哈佛、斯坦福、MIT、清华、北大等国内外 1300 + 顶尖高校的课程全部收录，不用翻墙就能上世界名校的课；</li>
<li><strong>企业课程全包含</strong>：谷歌、微软、亚马逊、TED 等 1700 + 知名企业的官方培训课程，学完就能直接应用到工作中；</li>
<li><strong>学科门类超齐全</strong>：涵盖计算机、设计、数学、信息安全、商业管理、人文历史等 11800 多个科目，从入门到进阶全覆盖。</li>
</ul>
<div>&nbsp;</div>
<h2>二、多维度选课方式，精准找到你需要的课程</h2>
<div>&nbsp;</div>
<div>网站的选课系统做得非常贴心，支持多种筛选方式，不用在海量课程里大海捞针：</div>
<div>&nbsp;</div>
<ul>
<li><strong>按学校筛选</strong>：直接选择你心仪的大学，查看该校所有开放的在线课程；</li>
<li><strong>按企业筛选</strong>：想学习某家公司的技术或方法论，直接找到对应的企业课程专区；</li>
<li><strong>按科目筛选</strong>：点击 &ldquo;所有科目&rdquo;，就能看到详细的学科分类，精准定位你想学的内容；</li>
<li><strong>按难度筛选</strong>：从入门级、中级到高级，根据自己的水平选择合适的课程。</li>
</ul>
<div>&nbsp;</div>
<h2>三、免费证书 + 无广告，学习体验拉满</h2>
<div>&nbsp;</div>
<ul>
<li><strong>免费获得证书</strong>：很多课程完成学习并通过考核后，可以免费获得官方颁发的电子证书，不管是写简历还是评职称都能用；</li>
<li><strong>完全免费无广告</strong>：网站本身不收取任何费用，也没有弹窗广告，学习过程没有任何干扰；</li>
<li><strong>课程质量有保障</strong>：所有课程都经过平台审核，都是来自正规院校和企业的优质内容，不用担心踩坑。</li>
</ul>
<div>&nbsp;</div>
<h2>四、使用零门槛，打开就能学</h2>
<div>&nbsp;</div>
<div>操作简单到离谱，全程不用注册登录也能浏览和观看大部分课程：</div>
<div>&nbsp;</div>
<ol>
<li>打开 Class Central 官网；</li>
<li>在搜索框输入你想学的课程名称，或者通过上面的筛选方式找到课程；</li>
<li>点击课程链接，会跳转到对应的课程平台（如 Coursera、edX 等），直接开始学习即可。</li>
</ol>
<div>&nbsp;</div>
<div>写在最后
<div>&nbsp;</div>
如果你想提升自己的专业技能，或者想学习一门新的知识，Class Central 绝对是你的不二之选！它把全球最优质的教育资源都整合在了一起，让你不用花一分钱，就能享受到世界顶尖的教育。赶紧收藏起来，从此告别学习的信息差，随时随地想学就学！</div>
<p><a href="http://img.jetmast.com/upload/2026/05/202605111012087NjysC.png" target="_blank" rel="noopener"><img src="http://img.jetmast.com/upload/2026/05/202605111012087NjysC.png" alt="image.png"></a></p>
<p><a href="http://img.jetmast.com/upload/2026/05/202605111012257NIJvL.png" target="_blank" rel="noopener"><img src="http://img.jetmast.com/upload/2026/05/202605111012257NIJvL.png" alt="image.png"></a></p>]]></description>
    <pubDate>Mon, 11 May 2026 10:12:06 +0800</pubDate>
    <dc:creator>墨桅</dc:creator>
    <guid>https://www.jetmast.com/thinking-bookmark/1864.html</guid>
</item>
<item>
    <title>推荐一个全网付费墙克星：PaywallBuster，一键解锁被遮挡内容，免费看遍全网文章！</title>
    <link>https://www.jetmast.com/thinking-bookmark/1863.html</link>
    <description><![CDATA[<div>还在为想看的深度文章被付费墙挡住、重要内容被灰色遮罩覆盖而烦恼吗？今天给大家安利一个真正的 &ldquo;网页内容解锁神器&rdquo;&mdash;&mdash;<strong>PaywallBuster</strong>。它整合了多种主流的付费墙绕过技术，不用注册登录，不用安装插件，粘贴链接就能一键解锁全网绝大多数付费文章和被遮挡内容，堪称信息获取的 &ldquo;万能钥匙&rdquo;！</div>
<div>&nbsp;</div>
<h2>一、核心功能：一键解锁，付费墙 + 遮挡内容全搞定</h2>
<div>&nbsp;</div>
<div>它的能力覆盖了几乎所有常见的网页内容限制：</div>
<div>&nbsp;</div>
<ul>
<li><strong>绕过软付费墙</strong>：支持《纽约时报》《华尔街日报》等全球上千家新闻、财经、科技媒体的付费文章，也能解锁国内多数资讯平台的 &ldquo;登录后阅读全文&rdquo; 限制；</li>
<li><strong>解除内容遮挡</strong>：自动移除网页上的灰色遮罩、弹窗遮挡、右键复制限制、文字选择限制，让被隐藏的内容完整显示；</li>
<li><strong>多引擎自动重试</strong>：集成 Archive 存档、Google 缓存、13ft Ladder 等多种解锁方案，一个引擎失败自动切换下一个，成功率大幅提升。</li>
</ul>
<div>&nbsp;</div>
<h2>二、使用零门槛，三步搞定内容解锁</h2>
<div>&nbsp;</div>
<div>操作简单到离谱，全程不用任何技术基础：</div>
<div>&nbsp;</div>
<ol>
<li>复制你想解锁的网页链接；</li>
<li>打开 PaywallBuster 官网，将链接粘贴到输入框；</li>
<li>点击 &ldquo;Remove Paywall&rdquo; 按钮，等待 1-3 秒，就能看到完整的无遮挡内容。
<div>&nbsp;</div>
无需注册登录，没有使用次数限制，电脑、手机、平板都能直接用。</li>
</ol>
<div>&nbsp;</div>
<h2>三、隐私友好，安全无套路</h2>
<div>&nbsp;</div>
<ul>
<li><strong>不收集个人数据</strong>：官方明确声明不会记录用户访问的链接、浏览内容或个人信息，仅做匿名的流量统计；</li>
<li><strong>无广告无弹窗</strong>：页面干净整洁，没有任何广告弹窗和诱导性下载，使用体验纯粹；</li>
<li><strong>无需安装插件</strong>：纯网页端服务，不用在浏览器里安装任何扩展，避免了恶意插件的安全风险。</li>
</ul>
<div>&nbsp;</div>
<h2>四、同类替代工具（备选方案）</h2>
<div>&nbsp;</div>
<div>如果遇到个别网站无法解锁，可以试试这些工具：</div>
<div>&nbsp;</div>
<ul>
<li><strong>13ft Ladder</strong>：12ft.io 的开源替代版，原理相同，支持大多数主流媒体的付费墙；</li>
<li><strong>Archive.is</strong>：网页存档工具，能查看绝大多数网页的历史快照，绕过付费墙的同时还能永久保存内容；</li>
<li><strong>Bypass Paywalls Clean</strong>：浏览器插件，支持 150 + 网站的自动解锁，适合频繁使用的用户。</li>
</ul>
<div>&nbsp;</div>
<div>写在最后
<div>&nbsp;</div>
需要特别提醒的是，本工具仅用于个人学习和研究用途，请尊重内容创作者的知识产权，不要将解锁后的内容用于商业传播或非法用途。如果你经常需要获取各类网络资讯和深度内容，PaywallBuster 绝对是你的必备神器！赶紧收藏起来，从此告别付费墙和内容遮挡的烦恼，自由获取你需要的信息～</div>
<div>
<p><a href="http://img.jetmast.com/upload/2026/05/202605101220497NCOeH.png" target="_blank" rel="noopener"><img src="http://img.jetmast.com/upload/2026/05/202605101220497NCOeH.png" alt="image.png"></a></p>
</div>]]></description>
    <pubDate>Sun, 10 May 2026 12:20:11 +0800</pubDate>
    <dc:creator>墨桅</dc:creator>
    <guid>https://www.jetmast.com/thinking-bookmark/1863.html</guid>
</item>
<item>
    <title>推荐一个知识动画神器：雾象，把看不懂的抽象知识，一键变成动态动画！</title>
    <link>https://www.jetmast.com/thinking-bookmark/1862.html</link>
    <description><![CDATA[<div>还在为课本里那些晦涩难懂的抽象概念头疼吗？今天给大家安利一个真正的 &ldquo;知识可视化神器&rdquo;&mdash;&mdash;<strong>雾象（Fogsight）</strong>。它是 AI 驱动的概念动画生成平台，只需要输入一句话，就能把数学公式、物理定律、生物过程这些 &ldquo;看不见摸不着&rdquo; 的知识，自动变成生动直观的动态动画，让学习效率直接翻倍！</div>
<div>&nbsp;</div>
<h2>一、一句话生成动画，抽象知识秒变直观</h2>
<div>&nbsp;</div>
<div>它最绝的地方就是 **&ldquo;输入概念&rarr;AI 自动生成完整动画&rdquo;** 的傻瓜式操作：</div>
<div>&nbsp;</div>
<ul>
<li>输入 &ldquo;光合作用的过程&rdquo;，它会自动生成光反应和暗反应的分步动画，清晰展示叶绿体中能量转化的全过程；</li>
<li>输入 &ldquo;冒泡排序算法&rdquo;，它会用动态小球演示排序逻辑，让复杂的计算机原理一看就懂；</li>
<li>输入 &ldquo;黑洞的形成原理&rdquo;，它会模拟天体坍缩、光线弯曲的场景，把宇宙奥秘直观呈现。</li>
</ul>
<div>&nbsp;</div>
<div>生成的动画不仅画面精美，还自带<strong>中英双语旁白和完整的叙事逻辑</strong>，不用你自己写脚本、做分镜，AI 全程包办。</div>
<div>&nbsp;</div>
<h2>二、支持多轮调优，动画细节随心改</h2>
<div>&nbsp;</div>
<div>生成的动画不满意？没关系，雾象支持<strong>自然语言多轮对话调整</strong>：</div>
<div>&nbsp;</div>
<ul>
<li>你可以说 &ldquo;把动画速度放慢一点&rdquo;&ldquo;换个更明亮的色调&rdquo;；</li>
<li>也可以要求 &ldquo;旁白换成女声&rdquo;&ldquo;增加一个步骤的演示&rdquo;；</li>
<li>真正做到 &ldquo;言出法随&rdquo;，不用懂任何动画制作技术，就能精准调整到你想要的效果。</li>
</ul>
<div>&nbsp;</div>
<h2>三、多种导出格式，全场景适配使用</h2>
<div>&nbsp;</div>
<div>生成的动画支持两种导出方式，完美适配不同需求：</div>
<div>&nbsp;</div>
<ul>
<li><strong>导出为 HTML 文件</strong>：体积小、加载快，可以直接插入 PPT 课件，上课用电脑打开就能演示，也能分享给学生和同事；</li>
<li><strong>导出为视频文件</strong>：一键生成 MP4 格式，适合制作科普短视频、教学微课，或者在没有网络的环境下播放。</li>
</ul>
<div>&nbsp;</div>
<h2>四、免费开源，使用零门槛</h2>
<div>&nbsp;</div>
<ul>
<li><strong>无需登录</strong>：打开官网就能直接使用，没有任何注册流程；</li>
<li><strong>免费额度</strong>：每天提供 3-5 次免费生成机会，足够日常学习和备课使用；</li>
<li><strong>开源项目</strong>：代码完全公开，支持本地部署，既保障数据隐私，也能满足个性化定制需求。</li>
</ul>
<div>&nbsp;</div>
<h2>五、适用人群广泛，谁用谁香</h2>
<div>&nbsp;</div>
<ul>
<li><strong>教师</strong>：备课神器，不用再到处找教学素材，一键生成课件动画，让课堂更生动；</li>
<li><strong>学生党</strong>：攻克理科难点的好帮手，把抽象的公式原理变成动画，理解和记忆都更深刻；</li>
<li><strong>科普创作者</strong>：10 分钟就能做出专业的科普动画，大大降低内容制作门槛；</li>
<li><strong>职场人</strong>：做工作汇报时，用动画演示复杂的业务逻辑，让听众更容易理解。</li>
</ul>
<div>&nbsp;</div>
<div>写在最后
<div>&nbsp;</div>
如果你还在为抽象知识的学习和讲解发愁，雾象绝对是你的救星！它用 AI 技术打破了知识的可视化壁垒，让 &ldquo;看不懂的知识&rdquo; 变成 &ldquo;看得见的动画&rdquo;。赶紧去官网试试，输入一个你最头疼的概念，看看它能给你带来怎样的惊喜！</div>
<div>
<p><a href="http://img.jetmast.com/upload/2026/05/202605101218127NafzE.png" target="_blank" rel="noopener"><img src="http://img.jetmast.com/upload/2026/05/202605101218127NafzE.png" alt="image.png"></a></p>
</div>]]></description>
    <pubDate>Sun, 10 May 2026 12:17:49 +0800</pubDate>
    <dc:creator>墨桅</dc:creator>
    <guid>https://www.jetmast.com/thinking-bookmark/1862.html</guid>
</item>
<item>
    <title>推荐一个找同类网站的神器：SimilarSites，输入网址就能扒出一堆同款优质站</title>
    <link>https://www.jetmast.com/thinking-bookmark/1861.html</link>
    <description><![CDATA[<div>还在为找优质网站资源到处碰壁吗？今天给大家安利一个神级网站工具 &mdash;&mdash;<strong>SimilarSites</strong>。它堪称 &ldquo;网站挖掘机&rdquo;，输入一个网址，就能自动匹配出一堆同类型、同风格的优质站点，不管是挖资源、找灵感还是做竞品分析，都能帮你效率翻倍！</div>
<div>&nbsp;</div>
<h2>一、核心功能：输入网址，同类网站自动 &ldquo;送货上门&rdquo;</h2>
<div>&nbsp;</div>
<div>它的逻辑特别简单：<strong>只要粘贴一个你喜欢的网站链接，它就会智能推荐一堆同款站点</strong>。</div>
<div>&nbsp;</div>
<ul>
<li>如果你常用某小说网站，它能列出更多免费阅读站；</li>
<li>你收藏了某设计灵感站，它会推荐一批风格相似的设计资源站；</li>
<li>哪怕是工具类、学习类网站，也能精准匹配出同类优质选项。</li>
</ul>
<div>&nbsp;</div>
<h2>二、附带数据参考，帮你筛出 &ldquo;真・优质站&rdquo;</h2>
<div>&nbsp;</div>
<div>推荐结果不止有网址，还附带<strong>实用数据标签</strong>，让你一眼辨别站点价值：</div>
<div>&nbsp;</div>
<ul>
<li>全球排名：判断网站的行业影响力；</li>
<li>预估流量：了解网站的活跃程度；</li>
<li>用户地区：明确网站的受众分布；</li>
<li>访问趋势：把握网站的发展势头。</li>
</ul>
<div>&nbsp;</div>
<h2>三、使用方式：网页 + 插件，双端操作超便捷</h2>
<div>&nbsp;</div>
<ul>
<li><strong>网页版</strong>：直接打开 <a href="https://similarsites.com" target="_blank" rel="noopener">similarsites.com</a>，粘贴目标网址，点击 &ldquo;Find Similar Sites&rdquo; 即可；</li>
<li><strong>浏览器插件</strong>：安装后，在任意网站页面点击插件图标，立刻弹出同类推荐，无需跳转页面，效率拉满。</li>
</ul>
<div>&nbsp;</div>
<h2>四、适用场景：从资源挖掘到竞品分析，全场景覆盖</h2>
<div>&nbsp;</div>
<ul>
<li><strong>资源党</strong>：一个站点就能挖出一整套同类站，资源收集效率直接翻倍；</li>
<li><strong>设计师 / 创作者</strong>：找灵感、找竞品、找替代工具，拓宽创作边界；</li>
<li><strong>学生 / 职场人</strong>：快速锁定学习、效率、素材类同款站，提升工作学习效率；</li>
<li><strong>市场 / 运营</strong>：一键扒取同行、竞品网站，为策略制定提供参考。</li>
</ul>
<div>&nbsp;</div>
<h2>五、同类替代工具（备选方案）</h2>
<div>&nbsp;</div>
<div>如果想尝试更多选择，这些工具也值得一试：</div>
<div>&nbsp;</div>
<ul>
<li><strong>SimilarWeb</strong>：偏向流量分析，同时也具备相似网站推荐功能；</li>
<li><strong>Related Sites 搜索</strong>：在浏览器中直接搜索 <code>related:网址</code>，可获取部分相似网站推荐。</li>
</ul>
<div>&nbsp;</div>
<div>写在最后
<div>&nbsp;</div>
有了 SimilarSites，不管是给博客挖掘独家资源，还是做行业调研，都能事半功倍。赶紧去试试，说不定下一个爆款推荐的 &ldquo;宝藏站&rdquo;，就从这里挖到！</div>
<div>
<p><a href="http://img.jetmast.com/upload/2026/05/202605101212317NlPZk.png" target="_blank" rel="noopener"><img src="http://img.jetmast.com/upload/2026/05/202605101212317NlPZk.png" alt="image.png"></a></p>
</div>]]></description>
    <pubDate>Sun, 10 May 2026 12:11:54 +0800</pubDate>
    <dc:creator>墨桅</dc:creator>
    <guid>https://www.jetmast.com/thinking-bookmark/1861.html</guid>
</item>
<item>
    <title>推荐一个 A 股信息宝藏站：市场数据、个股分析一站式掌握，股民决策好帮手！</title>
    <link>https://www.jetmast.com/thinking-bookmark/1860.html</link>
    <description><![CDATA[<div>如果你还在为找 A 股信息而四处奔波，今天这个神级网站绝对能解决你的痛点 &mdash;&mdash; 它把整个大 A 市场的关键信息 &ldquo;打包&rdquo; 呈现，从市场动态到个股分析，一站式满足股民的信息需求，堪称投资决策的智能助手。</div>
<div>&nbsp;</div>
<h2>一、全维度市场数据，一眼看透行情</h2>
<div>&nbsp;</div>
<div>这个网站覆盖了 A 股市场的全维度数据：</div>
<div>&nbsp;</div>
<ul>
<li><strong>大盘全景</strong>：上证指数、深证成指、创业板指等主要指数的实时走势、涨跌分布、成交量能一目了然，帮你快速把握市场整体情绪；</li>
<li><strong>板块轮动</strong>：行业板块的涨幅榜、跌幅榜、资金流向清晰呈现，让你精准捕捉热点板块，避开冷门 &ldquo;坑位&rdquo;；</li>
<li><strong>个股动态</strong>：个股的实时报价、涨跌停情况、换手率、市盈率等关键指标实时更新，投资标的的基本面和交易面信息一手掌握。</li>
</ul>
<div>&nbsp;</div>
<h2>二、深度个股分析，决策更有依据</h2>
<div>&nbsp;</div>
<div>它不仅有基础数据，更有深度的个股分析功能：</div>
<div>&nbsp;</div>
<ul>
<li><strong>财务透视</strong>：个股的营收、利润、资产负债率等财务数据直观展示，还能对比行业均值，帮你判断公司基本面优劣；</li>
<li><strong>机构动向</strong>：机构持仓、龙虎榜数据实时更新，跟着聪明资金布局，降低投资盲目性；</li>
<li><strong>技术指标</strong>：均线、MACD、KDJ 等经典技术指标图形化呈现，技术派投资者能轻松做趋势判断。</li>
</ul>
<div>&nbsp;</div>
<h2>三、操作便捷，信息获取零门槛</h2>
<div>&nbsp;</div>
<div>使用起来非常便捷：</div>
<div>&nbsp;</div>
<ul>
<li>界面简洁明了，没有冗余信息，关键数据一眼就能找到；</li>
<li>支持自定义关注个股和板块，打开网站就能看到自己关心的标的动态；</li>
<li>数据更新及时，和市场行情同步，让你不会错过关键交易节点。</li>
</ul>
<div>&nbsp;</div>
<h2>写在最后</h2>
<div>&nbsp;</div>
<div>对于股民来说，信息就是决策的生命线。这个网站把 A 股市场的核心信息整合得明明白白，不管你是投资新手还是资深股民，都能在这里找到有价值的参考。赶紧收藏起来，让它成为你 A 股投资路上的 &ldquo;信息雷达&rdquo;，助力你在市场中精准决策！</div>
<div>
<p><a href="http://img.jetmast.com/upload/2026/05/202605101206397NrN2u.png" target="_blank" rel="noopener"><img src="http://img.jetmast.com/upload/2026/05/202605101206397NrN2u.png" alt="image.png"></a></p>
<p><a href="http://img.jetmast.com/upload/2026/05/202605101207047Npe3r.png" target="_blank" rel="noopener"><img src="http://img.jetmast.com/upload/2026/05/202605101207047Npe3r.png" alt="image.png"></a></p>
</div>]]></description>
    <pubDate>Sun, 10 May 2026 12:05:49 +0800</pubDate>
    <dc:creator>墨桅</dc:creator>
    <guid>https://www.jetmast.com/thinking-bookmark/1860.html</guid>
</item>
<item>
    <title>推荐一个 AI 学习宝藏站：各类 AI 工具、教程免费学，堪称 “通往 AGI 之路” 的导航手册！</title>
    <link>https://www.jetmast.com/thinking-bookmark/1859.html</link>
    <description><![CDATA[<div>还在花冤枉钱买 AI 课程吗？今天给大家安利一个神级 AI 学习网站 &mdash;&mdash;<strong>通往 AGI 之路</strong>。它把各种收费 AI 内容免费整理好，从工具到教程一站式覆盖，堪称 AI 学习者的 &ldquo;百科全书&rdquo;，让你省下大笔学习成本！</div>
<div>&nbsp;</div>
<h2>一、全品类 AI 资源，一网打尽</h2>
<div>&nbsp;</div>
<div>这个网站收录了<strong>从入门到进阶的全品类 AI 资源</strong>，不管你想学什么方向，都能找到对应内容：</div>
<div>&nbsp;</div>
<ul>
<li><strong>基础学习</strong>：AI 学习路径、提示词（Prompts）、智能体（AI Agents）等入门知识，帮你搭建 AI 认知框架；</li>
<li><strong>创作领域</strong>：AI 绘画、AI 视频、AI 音乐、AI 3D 等创作类资源，从工具到教程手把手教你搞创作；</li>
<li><strong>技术领域</strong>：ComfyUI 工作流、AI 编程等技术向内容，满足开发者和技术爱好者的需求；</li>
<li><strong>实用工具</strong>：Midjourney、Stable Diffusion、GPT-4o 等热门 AI 工具的详细推荐和对应教程，直接抄作业。</li>
</ul>
<div>&nbsp;</div>
<h2>二、分类清晰，学习效率拉满</h2>
<div>&nbsp;</div>
<div>网站的资源分类极其细致，每个板块都像一个 &ldquo;垂直知识库&rdquo;：</div>
<div>&nbsp;</div>
<ul>
<li>想研究提示词，直接进 &ldquo;1.2 Prompts&rdquo; 分类；</li>
<li>想上手 AI 绘画，就看 &ldquo;1.4 AI 绘画&rdquo; 板块；</li>
<li>每个分类下还会列出具体工具和对应的教程，比如 Midjourney 的工具教程、Stable Diffusion 的使用指南等，让你不用到处找资源，一站式学透。</li>
</ul>
<div>&nbsp;</div>
<h2>三、完全免费，良心到离谱</h2>
<div>&nbsp;</div>
<div>最关键的是，<strong>所有资源完全免费</strong>，没有任何隐藏收费或引流套路。不管是 AI 小白想入门，还是资深玩家想深挖某个领域，都能在这里免费获取高质量内容，省下买课的钱，学习体验还更灵活自由。</div>
<div>&nbsp;</div>
<h2>写在最后</h2>
<div>&nbsp;</div>
<div>如果你想系统学习 AI，却被市面上五花八门的收费课程搞晕头，&ldquo;通往 AGI 之路&rdquo; 绝对是你的救星！它把 AI 领域的工具、教程、资源全部免费整理好，分类清晰、内容全面，堪称 AI 学习的 &ldquo;导航手册&rdquo;。赶紧收藏起来，从此告别 AI 学习的信息差，免费走上 &ldquo;通往 AGI 之路&rdquo;～</div>
<div>
<p><a href="http://img.jetmast.com/upload/2026/05/202605101204127NbLWG.png" target="_blank" rel="noopener"><img src="http://img.jetmast.com/upload/2026/05/202605101204127NbLWG.png" alt="image.png"></a></p>
<p><a href="http://img.jetmast.com/upload/2026/05/202605101204357Npo80.png" target="_blank" rel="noopener"><img src="http://img.jetmast.com/upload/2026/05/202605101204357Npo80.png" alt="image.png"></a></p>
</div>]]></description>
    <pubDate>Sun, 10 May 2026 12:03:59 +0800</pubDate>
    <dc:creator>墨桅</dc:creator>
    <guid>https://www.jetmast.com/thinking-bookmark/1859.html</guid>
</item>
<item>
    <title>推荐一个无痕改字神器：图片文字 3 秒替换，傻瓜式操作堪比 PS 大师！</title>
    <link>https://www.jetmast.com/thinking-bookmark/1858.html</link>
    <description><![CDATA[<div>还在为改图片上的文字而头疼吗？今天给大家安利一个 &ldquo;邪修级&rdquo; 图片改字工具 &mdash;&mdash;<strong>超级制图</strong>。它能让你在手机上轻松实现图片文字无痕替换，不用电脑、不用 PS、不用懂图层，傻瓜式操作，3 秒就能搞定，堪称打工人和设计小白的效率救星！</div>
<div>&nbsp;</div>
<h2>一、无痕改字，细节匹配绝了</h2>
<div>&nbsp;</div>
<div>这个工具最绝的地方在于<strong>改字不是简单覆盖，而是全方位智能匹配</strong>：</div>
<div>&nbsp;</div>
<ul>
<li>框选需要修改的文字区域，输入新内容，它会自动匹配原图的<strong>字体、字号、颜色、描边、阴影、排版、间距</strong>，就算放大到极致看细节，也完全看不出修改痕迹，分辨率和质感都能完美对齐。</li>
</ul>
<div>&nbsp;</div>
<h2>二、全场景覆盖，改字需求一次满足</h2>
<div>&nbsp;</div>
<div>不管你是什么场景的改字需求，它都能轻松应对：</div>
<div>&nbsp;</div>
<ul>
<li>电商人：主图改卖点、详情页改价格，一键更新产品信息；</li>
<li>运营人：海报改活动日期、宣传图改文案，快速适配营销节奏；</li>
<li>学生党：截图改作业数据、手写笔记改内容，轻松调整学习资料；</li>
<li>社交达人：表情包改台词、趣味图改文字，打造专属梗图。</li>
</ul>
<div>&nbsp;</div>
<h2>三、操作零门槛，手机端秒上手</h2>
<div>&nbsp;</div>
<div>使用流程简单到离谱：</div>
<div>&nbsp;</div>
<ol>
<li>打开超级制图工具（手机端直接操作）；</li>
<li>导入需要修改的图片，框选要改的文字区域；</li>
<li>输入新文字内容，点击生成，3 秒就能得到无痕修改后的图片；</li>
<li>直接保存或分享，全程不用折腾 PS，小白也能秒变 &ldquo;设计大师&rdquo;。</li>
</ol>
<div>&nbsp;</div>
<h2>四、完全免费，效率直接拉满</h2>
<div>&nbsp;</div>
<div>这个工具<strong>完全免费</strong>，没有任何隐藏收费。以前用 PS 改一张图要调半天，现在用它十秒就能搞定，效率提升不是一点点，打工人用来处理图片任务，简直不要太香！</div>
<div>&nbsp;</div>
<h2>写在最后</h2>
<div>&nbsp;</div>
<div>如果你经常需要修改图片上的文字，却被 PS 的复杂操作劝退，超级制图绝对是你的本命工具！它用傻瓜式操作实现了专业级的无痕改字效果，不管是工作、学习还是日常娱乐，都能帮你轻松搞定图片文字修改需求。赶紧去试试，从此和繁琐的图片编辑说再见～</div>
<div>
<p><a href="http://img.jetmast.com/upload/2026/05/202605101201347NEUSa.png" target="_blank" rel="noopener"><img src="http://img.jetmast.com/upload/2026/05/202605101201347NEUSa.png" alt="image.png"></a></p>
</div>]]></description>
    <pubDate>Sun, 10 May 2026 12:01:10 +0800</pubDate>
    <dc:creator>墨桅</dc:creator>
    <guid>https://www.jetmast.com/thinking-bookmark/1858.html</guid>
</item>
<item>
    <title>推荐一个 AI 提示词宝藏站：7000 + 高质量提示词，让你的 AI 工具秒变行业大佬！</title>
    <link>https://www.jetmast.com/thinking-bookmark/1857.html</link>
    <description><![CDATA[<div>还在为写不好 AI 提示词发愁吗？今天给大家安利一个能让 AI 工程师都 &ldquo;破防&rdquo; 的神奇网站 &mdash;&mdash;<strong>Prompt123</strong>。它集齐了 7748 个 AI 大佬的高质量提示词，不管是技术、商业、写作还是编程，直接复制粘贴就能让你的 AI 工具变身各领域专家，少走 90% 的弯路！</div>
<div>&nbsp;</div>
<h2>一、覆盖全领域，提示词直接抄作业</h2>
<div>&nbsp;</div>
<div>这个网站的提示词库丰富到离谱，全领域需求都能满足：</div>
<div>&nbsp;</div>
<ul>
<li><strong>创作类</strong>：小红书文案润色、短视频脚本创作、小说剧情生成等提示词，让你秒变内容大佬；</li>
<li><strong>商业类</strong>：市场营销方案、行业分析报告、带货视频脚本等提示词，助力商业决策和变现；</li>
<li><strong>技术类</strong>：编程开发（Python、SQL、Docker 等）、AI 插件（Claude、Codex 等）的提示词，程序员用了直接节省 60% 的 token，效率拉满。</li>
</ul>
<div>&nbsp;</div>
<h2>二、操作零门槛，复制粘贴即用</h2>
<div>&nbsp;</div>
<div>使用起来简单到极致：</div>
<div>&nbsp;</div>
<ol>
<li>打开 Prompt123 网站，浏览或搜索你需要的领域；</li>
<li>找到对应的高质量提示词，直接复制；</li>
<li>粘贴到你常用的 AI 工具（如 ChatGPT、Claude 等）中，AI 就能按照提示词精准输出结果，完全不用自己绞尽脑汁想表述。</li>
</ol>
<div>&nbsp;</div>
<h2>三、完全免费，无套路无限制</h2>
<div>&nbsp;</div>
<div>全程<strong>免费无广告</strong>，不用注册登录，也没有任何隐藏收费。不管你是 AI 新手还是资深玩家，都能无门槛使用，主打的就是一个 &ldquo;良心实用&rdquo;。</div>
<div>&nbsp;</div>
<h2>写在最后</h2>
<div>&nbsp;</div>
<div>如果你想让自己的 AI 工具发挥最大价值，却总卡在提示词这一步，Prompt123 绝对是你的救星！7000 + 提示词库覆盖全领域，复制粘贴就能让 AI 帮你搞定创作、商业、技术等各类需求。赶紧收藏起来，从此告别 &ldquo;提示词焦虑&rdquo;，让你的 AI 工具真正成为行业大佬！</div>
<div>
<p><a href="http://img.jetmast.com/upload/2026/05/202605101156087NkQvx.png" target="_blank" rel="noopener"><img src="http://img.jetmast.com/upload/2026/05/202605101156087NkQvx.png" alt="image.png"></a></p>
</div>]]></description>
    <pubDate>Sun, 10 May 2026 11:55:50 +0800</pubDate>
    <dc:creator>墨桅</dc:creator>
    <guid>https://www.jetmast.com/thinking-bookmark/1857.html</guid>
</item>
<item>
    <title>推荐一个网页内容下载神器：一键保存任何网页，突破下载限制！</title>
    <link>https://www.jetmast.com/thinking-bookmark/1856.html</link>
    <description><![CDATA[<div>作为专注分享实用工具的博主，今天要给大家安利一个堪称 &ldquo;网页资源搬运工&rdquo; 的宝藏网站 &mdash;&mdash;<strong>SingleFile</strong>。它能打破多数网页的下载限制，不管是文章、图片还是完整网页布局，一键就能完整保存，再也不用为 &ldquo;无法下载&rdquo;&ldquo;内容丢失&rdquo; 发愁！</div>
<div>&nbsp;</div>
<h2>一、支持全类型网页内容，下载无死角</h2>
<div>&nbsp;</div>
<div>这个网站的下载能力强到离谱，几乎能覆盖所有网页场景：</div>
<div>&nbsp;</div>
<ul>
<li>普通文章页：完整保存文字、段落格式，就算网页后续失效，本地文件也能正常查看；</li>
<li>图文混合页：图片、图表、表情包等所有可视化内容，都会同步保存，不会出现 &ldquo;文字在、图片无&rdquo; 的情况；</li>
<li>复杂结构页：带有表格、代码块、链接跳转的网页，能保留原始排版和交互逻辑，打开本地文件和在线浏览体验一致。</li>
</ul>
<div>&nbsp;</div>
<h2>二、操作超简单，一键下载不费劲</h2>
<div>&nbsp;</div>
<div>使用流程完全零门槛，小白也能秒上手：</div>
<div>&nbsp;</div>
<ol>
<li>复制你想下载的网页链接；</li>
<li>打开 SingleFile 网站，将链接粘贴到指定输入框；</li>
<li>点击 &ldquo;下载&rdquo; 按钮，等待几秒就能生成完整的 HTML 文件；</li>
<li>保存到本地后，用任意浏览器打开就能查看完整内容，无需额外插件。</li>
</ol>
<div>&nbsp;</div>
<h2>三、无限制 + 高兼容，使用超省心</h2>
<div>&nbsp;</div>
<ul>
<li>无下载限制：不管是付费专栏的预览页、论坛隐藏内容，还是各类资讯平台的文章，都能轻松下载（注：请遵守版权规定，仅用于个人学习存档）；</li>
<li>全设备兼容：支持电脑、手机端使用，Windows、Mac、安卓、iOS 系统都能正常操作；</li>
<li>免费无广告：全程不收费、无弹窗广告，也不用注册登录，主打一个 &ldquo;纯粹实用&rdquo;。</li>
</ul>
<div>&nbsp;</div>
<h2>写在最后</h2>
<div>&nbsp;</div>
<div>如果你经常需要保存网页资料、担心心仪内容被下架，或者想离线查看网页，SingleFile 绝对是你的必备工具！它用最简单的操作，解决了网页下载的各种痛点。赶紧收藏起来，下次遇到想保存的网页，直接用它一键搞定～</div>
<p><a href="http://img.jetmast.com/upload/2026/05/202605101154207NZ4Pk.png" target="_blank" rel="noopener"><img src="http://img.jetmast.com/upload/2026/05/202605101154207NZ4Pk.png" alt="image.png"></a></p>]]></description>
    <pubDate>Sun, 10 May 2026 11:54:19 +0800</pubDate>
    <dc:creator>墨桅</dc:creator>
    <guid>https://www.jetmast.com/thinking-bookmark/1856.html</guid>
</item>
<item>
    <title>推荐一个打字背单词的神奇网站：告别死记硬背，四六级、考研英语轻松拿下！</title>
    <link>https://www.jetmast.com/thinking-bookmark/1855.html</link>
    <description><![CDATA[<div>作为一名专注分享学习神器的博主，今天要给大家安利一个能让你 &ldquo;背单词背上瘾&rdquo; 的宝藏网站 &mdash;&mdash;<strong>Qwerty Learner</strong>。它把枯燥的单词记忆变成了键盘敲写的趣味过程，不管是四六级、考研英语，还是小语种学习，都能帮你高效攻克词汇关。</div>
<div>&nbsp;</div>
<h2>一、多语言词库全覆盖，学习需求一次满足</h2>
<div>&nbsp;</div>
<div>这个网站的词库丰富到超出想象：</div>
<div>&nbsp;</div>
<ul>
<li><strong>英语类</strong>：涵盖四六级、考研、托福、雅思、专四专八等各类考试词汇，从基础到高阶一网打尽。</li>
<li><strong>小语种类</strong>：西班牙语、法语、日语、德语等多种语言词库任选，想学哪种语言的词汇都能找到对应的资源。</li>
</ul>
<div>&nbsp;</div>
<h2>二、打字背词 + 默写模式，记忆效率直接拉满</h2>
<div>&nbsp;</div>
<div>它最绝的地方在于<strong>把 &ldquo;死记硬背&rdquo; 变成 &ldquo;键盘敲写&rdquo;</strong>：</div>
<div>&nbsp;</div>
<ul>
<li>背单词时，需要你在键盘上敲出单词拼写，通过 &ldquo;输入动作&rdquo; 强化记忆，比单纯看单词记得更牢。</li>
<li>还支持<strong>默写模式</strong>，隐藏单词拼写，只靠记忆输入，大大提升学习效率，让你在 &ldquo;输入 &mdash; 回忆 &mdash; 强化&rdquo; 的闭环中吃透单词。</li>
</ul>
<div>&nbsp;</div>
<h2>三、智能错题本 + 学习计划，针对性提升超省心</h2>
<div>&nbsp;</div>
<ul>
<li><strong>错题本功能</strong>：会自动将打错的单词保存到错题本，还会标记错误频次，方便你日后针对性练习，把薄弱词汇逐个击破。</li>
<li><strong>学习计划</strong>：每个阶段的学习计划都帮你安排好了，从每日任务到阶段性目标，跟着计划走，词汇量提升肉眼可见。</li>
</ul>
<div>&nbsp;</div>
<h2>四、完全免费无广告，学习体验纯粹又贴心</h2>
<div>&nbsp;</div>
<div>全程<strong>免费无广</strong>，不用花一分钱就能享受所有功能，学习过程没有任何干扰。界面简洁，操作零门槛，不管是学生党还是职场人，上手就能用，主打一个 &ldquo;人性又实用&rdquo;。</div>
<div>&nbsp;</div>
<h2>写在最后</h2>
<div>&nbsp;</div>
<div>如果你还在为背单词发愁，或者想尝试一种更高效的词汇学习方式，Qwerty Learner 绝对值得一试！它用打字的趣味形式打破了背单词的枯燥感，让词汇积累变成一件轻松又上瘾的事。赶紧去体验，四六级、考研英语的词汇关，它帮你轻松拿下！</div>
<p><a href="http://img.jetmast.com/upload/2026/05/202605101151187NLzp5.png" target="_blank" rel="noopener"><img src="http://img.jetmast.com/upload/2026/05/202605101151187NLzp5.png" alt="image.png"></a></p>]]></description>
    <pubDate>Sun, 10 May 2026 11:51:16 +0800</pubDate>
    <dc:creator>墨桅</dc:creator>
    <guid>https://www.jetmast.com/thinking-bookmark/1855.html</guid>
</item>
<item>
    <title>推荐一个让文具店老板 “急眼” 的宝藏网站：各类打印纸模板免费生成，高清导出直接打印！</title>
    <link>https://www.jetmast.com/thinking-bookmark/1854.html</link>
    <description><![CDATA[<div>作为一个喜欢挖掘实用工具的博主，今天要给大家分享一个能 &ldquo;承包&rdquo; 你所有打印纸需求的网站 &mdash;&mdash;<strong>纸由我（PaperMe）</strong>。它就像一个线上 &ldquo;打印纸工厂&rdquo;，各种类型的纸张模板随便选，关键还完全免费，导出高清文件直接打印，文具店老板看了都得慌！</div>
<div>&nbsp;</div>
<h2>一、近 40 种纸张模板，覆盖全场景需求</h2>
<div>&nbsp;</div>
<div>这个网站的纸张模板丰富到离谱，不管是学生党还是职场人，都能找到对口的：</div>
<div>&nbsp;</div>
<ul>
<li><strong>学生专属</strong>：拼音纸、作文纸、算术纸、英语作业纸、书法练习纸（米字格、回宫格等多种样式），甚至还有儿童涂鸦纸，从小学生到高中生的学习用纸需求全满足。</li>
<li><strong>职场必备</strong>：会议纸、康奈尔笔记、项目规划纸、分镜纸，不管是开会记录、做项目规划还是搞创意分镜，都能找到合适的模板。</li>
<li><strong>小众需求</strong>：乐谱纸、吉他六线谱、各种方格（六边形网格、法式田字格等）、复杂计划表，就算是小众的创作或规划需求，也能精准匹配。</li>
</ul>
<div>&nbsp;</div>
<h2>二、自定义功能拉满，纸张样式随心所欲</h2>
<div>&nbsp;</div>
<div>它不仅模板多，还支持高度自定义：</div>
<div>&nbsp;</div>
<ul>
<li><strong>尺寸精准匹配</strong>：A4、A3、B4 等常规尺寸任选，也能自定义尺寸，满足不同打印需求。</li>
<li><strong>细节自由调整</strong>：线条的颜色、间距、粗细可以随意改，背景颜色也能根据喜好调整，甚至边框的边距都能精确设置。</li>
<li><strong>风格多样选择</strong>：复古风、极简风等多种主题可选，让你的纸张不再单调。</li>
</ul>
<div>&nbsp;</div>
<h2>三、高清导出，直接打印超方便</h2>
<div>&nbsp;</div>
<div>选好模板、调好样式后，支持<strong>导出 PDF、SVG、PNG</strong>三种格式，高清无水印，直接打印就能用。而且全程<strong>完全免费，不用登录</strong>，点开网站就能直接操作，主打一个 &ldquo;免费快乐，点开即用&rdquo;。</div>
<div>&nbsp;</div>
<h2>写在最后</h2>
<div>&nbsp;</div>
<div>如果你还在为买各种打印纸花钱，或者找不到合适的纸张模板发愁，纸由我绝对是你的救星！不管是学习、工作还是创作，它都能给你提供个性化的纸张解决方案。赶紧收藏起来，从此和文具店的打印纸说再见～</div>
<div>
<p><a href="http://img.jetmast.com/upload/2026/05/202605101149137NVpgP.png" target="_blank" rel="noopener"><img src="http://img.jetmast.com/upload/2026/05/202605101149137NVpgP.png" alt="image.png"></a></p>
<p>&nbsp;</p>
</div>]]></description>
    <pubDate>Sun, 10 May 2026 11:48:58 +0800</pubDate>
    <dc:creator>墨桅</dc:creator>
    <guid>https://www.jetmast.com/thinking-bookmark/1854.html</guid>
</item>
<item>
    <title>推荐一个超强理科学习神器：把复杂知识可视化，从小学到大学理科全搞定！</title>
    <link>https://www.jetmast.com/thinking-bookmark/1853.html</link>
    <description><![CDATA[<div>作为一名专注分享实用学习资源的博主，今天要给大家安利一个能让理科学习效率翻倍的宝藏网站 &mdash;&mdash;<strong>PhET Interactive Simulations</strong>。它用互动模拟的方式，把枯燥的理科知识变得生动又好懂，堪称 &ldquo;理科学习的可视化魔法站&rdquo;。</div>
<div>&nbsp;</div>
<h2>一、覆盖全学段理科科目，从小学学到大学</h2>
<div>&nbsp;</div>
<div>这个网站包含了从<strong>小学到大学</strong>的全部理科科目，不管你是刚开始接触数理化的小学生，还是备战高考、攻克大学专业课的学生，都能在这里找到适合的学习资源：</div>
<div>&nbsp;</div>
<ul>
<li>小学阶段：通过互动游戏理解数字、图形等基础数学概念，比如数蝴蝶、玩数轴游戏，在玩中掌握知识。</li>
<li>中学阶段：物理的力学、电学，化学的分子结构、化学反应，数学的函数、几何等，都有对应的互动模拟实验。</li>
<li>大学阶段：甚至涉及量子化学、地球科学等专业领域的模拟学习内容，帮你攻克高深知识点。</li>
</ul>
<div>&nbsp;</div>
<h2>二、把复杂知识可视化，学习效率直接拉满</h2>
<div>&nbsp;</div>
<div>它最绝的地方在于<strong>将抽象的理科知识可视化、互动化</strong>：</div>
<div>&nbsp;</div>
<ul>
<li>学物理浮力时，能直观看到不同重量物体在液体中的沉浮变化；</li>
<li>学化学分子时，可动手模拟分子的结合与分解过程；</li>
<li>学数学函数时，能通过调整参数实时看到函数图像的变化。
<div>&nbsp;</div>
这种 &ldquo;看得见、摸得着&rdquo; 的学习方式，让晦涩的知识瞬间变得易懂，记忆也更深刻。</li>
</ul>
<div>&nbsp;</div>
<h2>三、操作简单，按需学习超灵活</h2>
<div>&nbsp;</div>
<div>使用起来非常方便：</div>
<div>&nbsp;</div>
<ul>
<li>先选择你需要的科目（物理、数学、化学、地球科学、生物等）；</li>
<li>然后查看科目的详细分类，找到想学习的具体课程；</li>
<li>点击就能进入互动模拟界面，开始沉浸式学习。
<div>&nbsp;</div>
全程无需注册登录，打开网站就能直接用，学习节奏自己把控，哪里不懂就反复模拟研究。</li>
</ul>
<div>&nbsp;</div>
<h2>写在最后</h2>
<div>&nbsp;</div>
<div>如果你还在为理科学习头疼，或者想给孩子找个有趣的理科启蒙工具，PhET 绝对值得收藏！它用互动模拟打破了理科学习的壁垒，让学习变成一件有趣又高效的事。快去试试，你会发现理科原来可以这么简单！</div>
<div>
<p><a href="http://img.jetmast.com/upload/2026/05/202605101147027N2rFv.png" target="_blank" rel="noopener"><img src="http://img.jetmast.com/upload/2026/05/202605101147027N2rFv.png" alt="image.png"></a></p>
<p><a href="http://img.jetmast.com/upload/2026/05/202605101146207NrLDt.png" target="_blank" rel="noopener"><img src="http://img.jetmast.com/upload/2026/05/202605101146207NrLDt.png" alt="image.png"></a></p>
</div>]]></description>
    <pubDate>Sun, 10 May 2026 11:43:36 +0800</pubDate>
    <dc:creator>墨桅</dc:creator>
    <guid>https://www.jetmast.com/thinking-bookmark/1853.html</guid>
</item>
<item>
    <title>推荐一个 “无用却上头” 的奇葩网站：专治无聊，玩一天都不腻！</title>
    <link>https://www.jetmast.com/thinking-bookmark/1852.html</link>
    <description><![CDATA[<div>作为每天挖掘各类趣味资源的博主，今天要给大家分享一个反套路宝藏 &mdash;&mdash;<strong>堪称 &ldquo;无聊星人救星&rdquo; 的奇葩网站</strong>。它没有实用功能，却凭着魔性又治愈的设定，让我不知不觉玩了一下午，彻底告别 &ldquo;没事干&rdquo; 的尴尬！</div>
<div>&nbsp;</div>
<h2>一、&ldquo;毫无用处&rdquo; 却让人上头，玩法魔性又解压</h2>
<div>&nbsp;</div>
<div>这个网站的核心就是 &ldquo;无意义却超有趣&rdquo;，每一个功能都在挑战 &ldquo;实用主义&rdquo;，却越玩越上瘾：</div>
<div>&nbsp;</div>
<ul>
<li>可以在线模拟 &ldquo;挤气泡膜&rdquo;，点击屏幕就能听到清脆的 &ldquo;啪嗒&rdquo; 声，解压效果堪比真气泡膜；</li>
<li>能生成随机漂浮的彩色粒子，用鼠标拖动就能改变轨迹，无聊时盯着看能发呆半小时；</li>
<li>还有 &ldquo;虚拟烟花&rdquo;&ldquo;文字雨&rdquo; 等趣味特效，不用等节日，随时能给自己一场视觉小惊喜；</li>
<li>甚至能玩 &ldquo;在线数羊&rdquo;&ldquo;随机翻书&rdquo; 这类看似无聊却治愈的小游戏，专治失眠和碎片化无聊。</li>
</ul>
<div>&nbsp;</div>
<h2>二、操作零门槛，全场景适配不挑设备</h2>
<div>&nbsp;</div>
<ul>
<li>无需注册登录，打开网站就能直接玩，没有广告弹窗打扰，体验感超纯粹；</li>
<li>完美适配电脑、手机，上班摸鱼、通勤路上、睡前放松，任何碎片化时间都能用来打发；</li>
<li>界面简洁干净，没有复杂按钮，不管是小孩还是长辈，上手就能玩明白。</li>
</ul>
<div>&nbsp;</div>
<h2>三、不止是无聊，更是情绪调味剂</h2>
<div>&nbsp;</div>
<div>看似 &ldquo;无用&rdquo; 的背后，其实藏着治愈人心的小力量：烦躁时玩会儿挤气泡膜，压力能悄悄释放；发呆时看会儿粒子漂浮，思绪能慢慢平静；甚至和朋友一起比拼 &ldquo;数羊速度&rdquo;，还能解锁互动乐趣。它不解决实际问题，却能给平淡的生活加一勺 &ldquo;趣味调味剂&rdquo;。</div>
<div>&nbsp;</div>
<h2>写在最后</h2>
<div>&nbsp;</div>
<div>如果你也经常被 &ldquo;无聊&rdquo; 侵袭，或者想找个不费脑的解压方式，这个奇葩网站绝对值得收藏！生活不需要时刻 &ldquo;有用&rdquo;，偶尔浪费时间在喜欢的小事上，也是一种幸福～ 你平时无聊时会做什么？欢迎在评论区分享你的解压小技巧！</div>
<div>
<p><a href="http://img.jetmast.com/upload/2026/05/202605101141357NFdAD.png" target="_blank" rel="noopener"><img src="http://img.jetmast.com/upload/2026/05/202605101141357NFdAD.png" alt="image.png"></a></p>
</div>]]></description>
    <pubDate>Sun, 10 May 2026 11:38:40 +0800</pubDate>
    <dc:creator>墨桅</dc:creator>
    <guid>https://www.jetmast.com/thinking-bookmark/1852.html</guid>
</item>
</channel>
</rss>