AI辅助开发实战:用Python重做一个mini版Photoshop
最近技术社区和设计圈都在讨论一件事Adobe 更新应用内许可条款后不少开发者担心“用 AI 辅助开发软件”会撞上版权红线随后 Adobe 官方人员在社区公开回应表示不会对使用 AI 辅助开发的非商业开源替代品采取法律行动前提是不使用 Adobe 的字体、图标和品牌资产。这个表态一出“开发者靠 AI 重做 Adobe 七件套”的话题迅速登上各大技术社区热榜。所谓“Adobe 七件套”通常包含 Photoshop、Premiere Pro、After Effects、Illustrator、Lightroom、InDesign 和 Acrobat覆盖了位图编辑、矢量绘图、视频剪辑、特效合成、摄影后期、版式编排和 PDF 处理是设计和创意行业的基础设施。如果这套软件真的能被开源替代品逐步替换那对设计师、开发者和中小企业都意义重大。这篇文章就围绕这件事展开梳理事件背景、技术可行性并带着大家走一遍“用 AI 辅助开发一个 mini 版 Photoshop”的完整实战流程。无论你是想进设计工具赛道的开发者还是想了解 AI 辅助开发工作流的工程师都可以从中获得一套可复制的方法。1. 事件背景从“条款争议”到“重做七件套”1.1 这件事是怎么发生的Adobe 的产品在创意行业几乎是“默认工具”。无论是平面设计、视频剪辑还是 UI 设计团队协作都是围绕 Adobe 生态展开的。正因为覆盖面广Adobe 的任何条款变化都会引发连锁反应。近期讨论的焦点是 Adobe 更新了部分应用内的许可协议其中涉及生成式 AI、自动化脚本和数据使用等表述。部分条款写得比较宽泛开发者和设计师都开始担心如果我用 AI 写代码、训练模型甚至直接开发一个替代 Photoshop 的工具会不会被 Adobe 追责随后 Adobe 官方在社区回应核心意思可以概括为Adobe 不会针对使用 AI 辅助开发的非商业开源替代品发起法律行动但底线是不能使用 Adobe 的字体、图标、品牌资产以及受保护的专有算法。这个回应算是给开源社区“松了绑”也直接刺激了“开发者靠 AI 重做七件套”的讨论。1.2 为什么偏偏是“七件套”“七件套”之所以被单独拎出来说是因为它们不是一个孤立的软件而是一整套设计工作流软件核心功能用户群体Photoshop位图编辑、合成、修图平面设计师、摄影师、UI 设计师Illustrator矢量图形绘制插画师、品牌设计师Premiere Pro视频剪辑视频创作者、影视后期After Effects动效与视觉特效合成动态设计师、影视包装Lightroom摄影后期管理与调色摄影师InDesign书籍、杂志版式设计编辑、排版设计师AcrobatPDF 创建与编辑办公人员、出版行业这七款软件互相配合形成了从“素材处理”到“成品输出”的闭环。如果只是替换其中一款用户并不会真正迁移只有整套替代方案成熟生态才会松动。所以“重做七件套”这个目标本质上是在挑战 Adobe 的生态壁垒。1.3 事件背后的技术信号这件事表面上是版权和商业之争底层其实是生成式 AI 带来的开发效率跃迁。放在三年前一个独立开发者想重做 Photoshop 的某个核心功能需要从零学习图像处理算法、UI 框架、插件系统和编译发布流程没有半年根本出不了可用的 Demo。而现在借助 AI 辅助编码工具一个熟悉 Python 的开发者可以在几天内搭建出包含基础滤镜、图层操作和选区编辑的桌面工具。也就是说AI 让“一个人重做一个小型设计软件”从不可能变成了可能。虽然距离完整的 Photoshop 还有很大差距但已经足够形成技术讨论和实验项目。2. 用 AI 重建设计软件技术上可行吗2.1 四个层面的可行性用 AI 重做设计软件可以从四个层面来看第一图像处理算法。Photoshop 的核心能力是滤镜、选区、蒙版、图层混合模式、色彩管理。这些底层算法大部分在 OpenCV、Pillow、scikit-image 等开源库中已经实现。AI 的价值在于快速组合这些算法而不是重新发明轮子。第二界面设计。一个设计软件的 UI 界面非常复杂包括菜单、工具栏、图层面板、颜色选择器、历史记录等。用传统方式手写这些界面工作量极大但 AI 可以根据设计稿或文字描述生成 Vue、React、Qt、Tkinter 的界面代码开发效率提升明显。第三跨平台打包。现代开源工具链支持 Windows、macOS、Linux 三端打包配合 Electron、PyInstaller、Tauri 等框架可以快速发布桌面应用。AI 可以帮助编写打包脚本和解决依赖问题。第四批处理与自动化。设计工作流中大量重复操作可以通过脚本完成AI 在编写批处理脚本方面非常有优势例如批量转换格式、批量加水印、批量调色。2.2 最难的其实不是算法不过真正难的不是算法而是以下三个问题第一是插件生态。Photoshop 的强大在于海量第三方插件和动作脚本。即使核心功能被替代如果插件系统没有同步成长用户依然不会迁移。第二是硬件加速。PS 的液化、智能锐化、超大图纸渲染都依赖 GPU 加速和专业色彩管理。开源替代方案在色彩一致性、HDR 显示、打印预览等方面还有明显差距。第三是用户体验和习惯。设计师几十年积累的快捷键、肌肉记忆、工作流模板都建立在 Adobe 软件上。即使功能对等迁移成本依然很高。所以“重做七件套”从技术上讲是一条漫长但切实可行的路短期内很难直接动摇 Adobe 的市场地位但可以为创作者提供另一种选择。2.3 开源生态的现实基础当前开源生态已经有相当多可用的基础组件领域开源组件图像编辑GIMP、Krita、OpenCV、Pillow矢量绘图Inkscape、SVG.js、Cairo视频剪辑Blender、Shotcut、FFmpeg特效合成Natron、GIMP GEGL摄影管理darktable、RawTherapee排版设计Scribus、Typst、paged.jsPDF 处理PDF.js、PyMuPDF、Ghostscript这些项目已经存在多年但开发维护节奏、交互设计和使用体验各不相同。AI 辅助开发可以加速这些项目之间的整合例如为 darktable 生成更友好的中文界面或为 Scribus 开发课程资源。3. 实战准备构建一个 mini 版 Photoshop前面聊了很多背景下面进入动手环节。我用 Python 和 AI 辅助开发一个迷你图像处理工具功能覆盖打开图片、灰度化、高斯模糊、边缘检测、二值化、裁剪和旋转。这个工具虽然简单但已经覆盖了 Photoshop 最基础的工作流加载图片、视觉处理、结果预览、保存导出。通过这个例子你可以直观感受到“AI 辅助重做设计软件”到底是怎么一回事。3.1 技术选型与版本说明演示环境如下操作系统Windows 10/11 或 macOSPython 版本3.10建议 3.11 或 3.12图形界面TkinterPython 自带图像处理OpenCV 4.x、Pillow、Numpy开发工具VS Code 或 PyCharm版本需要根据你的项目实际情况调整本文示例以常见环境为例重点演示配置思路。运行前安装依赖pip install opencv-python pillow numpy如果网络较慢可以切换国内镜像源pip install opencv-python pillow numpy -i https://pypi.tuna.tsinghua.edu.cn/source3.2 项目结构规划在写代码之前先想清楚目录结构。一个清晰的工程结构既方便 AI 生成模块化代码也方便后续扩展mini_ps/ ├── main.py # 程序入口 ├── requirements.txt # 依赖清单 ├── core/ │ ├── __init__.py │ ├── image_ops.py # 图像基础操作 │ └── filters.py # 滤镜与特效 └── ui/ ├── __init__.py └── app.py # 图形界面按模块拆分的好处是你可以让 AI 分别生成 image_ops.py、filters.py 和 app.py每个文件都有明确职责遇到问题时容易定位和修复。3.3 编写 requirements.txtopencv-python4.8.0 pillow10.0.0 numpy1.24.04. 核心开发用 AI 生成每个功能模块4.1 需求拆解先让 AI 帮你列功能清单不要一上来就写代码。先向 AI 提问把需求说清楚。例如在 ChatGPT、Claude、Copilot 或国内的大模型助手中输入下面这段提示词我正在开发一个迷你图像处理工具参考 Photoshop 的基础功能进行简化。请帮我列出 MVP 版本应该包含的功能清单要求优先级从高到低排列并说明每个功能的输出效果。AI 通常会给出这样一份清单优先级功能说明P0打开图片支持 jpg、png、bmpP0保存图片保存处理后结果P0灰度化彩色图片转黑白P1高斯模糊照片柔化处理P1边缘检测提取轮廓P1二值化图像黑白分离P2旋转、裁剪基础几何变换P2图层叠加两张图片混合这个清单就是我们的开发大纲。AI 辅助开发的正确姿势是让 AI 做“需求分析 编码”你负责决策和审查。4.2 开发 image_ops.py图像读写与几何变换核心功能一图片的打开、保存、缩放、旋转和裁剪。向 AI 提问请用 Python 写一个模块使用 OpenCV 实现以下函数 1. load_image(path)读取图片文件不存在时报错 2. save_image(img, path)保存图片 3. resize_image(img, width, height)缩放图片使用 INTER_AREA 插值算法 4. rotate_image(img, angle)以图片中心旋转指定角度 5. crop_image(img, x, y, w, h)裁剪图片 要求函数签名清晰包含参数说明和异常处理。生成的代码核心思路如下我整理后保存到core/image_ops.py# 文件路径mini_ps/core/image_ops.py import cv2 import numpy as np def load_image(path: str) - np.ndarray: 读取图片文件。 Args: path: 图片文件路径。 Returns: 返回 BGR 格式的 numpy 数组。 Raises: FileNotFoundError: 文件不存在或无法读取时抛出。 img cv2.imread(path) if img is None: raise FileNotFoundError(f无法读取图片: {path}) return img def save_image(img: np.ndarray, path: str) - None: 保存图片到指定路径。 Args: img: OpenCV 图像数组。 path: 输出路径支持 .jpg、.png 等格式。 cv2.imwrite(path, img) def resize_image(img: np.ndarray, width: int, height: int) - np.ndarray: 缩放图片到指定宽高。 Args: img: 原始图像。 width: 目标宽度。 height: 目标高度。 return cv2.resize(img, (width, height), interpolationcv2.INTER_AREA) def rotate_image(img: np.ndarray, angle: float) - np.ndarray: 以图像中心为基准旋转指定角度。 Args: img: 原始图像。 angle: 旋转角度正值为逆时针。 h, w img.shape[:2] center (w // 2, h // 2) matrix cv2.getRotationMatrix2D(center, angle, 1.0) return cv2.warpAffine(img, matrix, (w, h), flagscv2.INTER_LINEAR) def crop_image(img: np.ndarray, x: int, y: int, w: int, h: int) - np.ndarray: 裁剪图片中的矩形区域。 Args: img: 原始图像。 x: 左上角横坐标。 y: 左上角纵坐标。 w: 区域宽度。 h: 区域高度。 return img[y:y h, x:x w]需要注意几点OpenCV 读取图片默认使用 BGR 色彩模式而不是常见的 RGB后续显示到界面时要转换。cv2.imread在文件不存在时不会抛异常而是返回None所以要手动判断并抛出FileNotFoundError。缩放时推荐使用INTER_AREA在缩小图片时保留更多细节这是 AI 代码里不太容易自动选对的地方需要人工修正或提示。4.3 开发 filters.py滤镜与特效向 AI 提问请继续完善项目编写一个 filters.py 模块使用 OpenCV 实现 1. to_gray(img)转为灰度图 2. to_binary(img, threshold127)二值化 3. gaussian_blur(img, ksize5)高斯模糊 4. edge_detect(img, low50, high150)边缘检测 要求所有函数输入输出都是 numpy 数组ksize 必须是奇数。整理后的代码如下# 文件路径mini_ps/core/filters.py import cv2 import numpy as np def to_gray(img: np.ndarray) - np.ndarray: 彩色图像转灰度图。 return cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) def to_binary(img: np.ndarray, threshold: int 127) - np.ndarray: 图像二值化像素值大于阈值为白色否则为黑色。 gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) _, binary cv2.threshold(gray, threshold, 255, cv2.THRESH_BINARY) return binary def gaussian_blur(img: np.ndarray, ksize: int 5) - np.ndarray: 高斯模糊。 Args: img: 输入图像。 ksize: 卷积核大小必须是正奇数。 if ksize % 2 0: ksize 1 return cv2.GaussianBlur(img, (ksize, ksize), 0) def edge_detect(img: np.ndarray, low: int 50, high: int 150) - np.ndarray: Canny 边缘检测。 Args: img: 输入图像。 low: 低阈值。 high: 高阈值。 return cv2.Canny(img, low, high)这里的核心概念是灰度化将三通道的 BGR 图像映射为单通道灰度图常用于中间步骤。二值化设定阈值把图片变成黑白两色常用于文档扫描、文字识别预处理。高斯模糊每个像素取周围像素的加权平均值卷积核越大模糊程度越高。Canny 边缘检测先计算梯度再通过双阈值筛选边缘。低阈值和高阈值需要根据图片内容调整。这些基础算法是 Photoshop 众多滤镜的地基也是 AI 最容易快速生成的模块。4.4 开发 app.py整合图形界面核心功能写好后接下来要做的是把它们串成一个可视化工具。向 AI 提问请用 Tkinter 写一个简单的图像处理 GUI功能包括 1. 选择文件并显示原图 2. 将预览图显示在界面上 3. 点击按钮执行灰度、模糊、边缘检测、二值化 4. 点击保存按钮输出处理结果 5. 显示图片时注意色彩通道转换BGR - RGB 要求界面简洁有两个展示区左原图右结果。这里有一个很容易踩坑的地方OpenCV 使用 BGR 顺序Tkinter 的 PhotoImage 使用 RGB如果直接显示图片颜色会变成蓝橙色调。因此需要一步转换from PIL import Image, ImageTk import cv2 # BGR - RGB - PIL Image - ImageTk.PhotoImage rgb_img cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) pil_img Image.fromarray(rgb_img) photo ImageTk.PhotoImage(pil_img)完整 GUI 代码参考# 文件路径mini_ps/ui/app.py import tkinter as tk from tkinter import filedialog, messagebox from PIL import Image, ImageTk import cv2 import numpy as np from core.image_ops import ( load_image, save_image, resize_image, rotate_image, crop_image ) from core.filters import ( to_gray, to_binary, gaussian_blur, edge_detect ) class MiniPsApp: def __init__(self, root: tk.Tk): self.root root self.root.title(Mini Photoshop - AI 辅助开发版) self.root.geometry(960x600) self.original None # 原始 BGR 图像 self.result None # 处理后的 BGR 图像 self.original_photo None self.result_photo None self._build_ui() def _build_ui(self): 构建界面布局。 toolbar tk.Frame(self.root) toolbar.pack(sidetk.TOP, filltk.X, padx5, pady5) tk.Button(toolbar, text打开图片, commandself.open_image).pack(sidetk.LEFT, padx2) tk.Button(toolbar, text灰度化, commandlambda: self.apply_filter(to_gray)).pack(sidetk.LEFT, padx2) tk.Button(toolbar, text高斯模糊, commandlambda: self.apply_filter(gaussian_blur)).pack(sidetk.LEFT, padx2) tk.Button(toolbar, text边缘检测, commandlambda: self.apply_filter(edge_detect)).pack(sidetk.LEFT, padx2) tk.Button(toolbar, text二值化, commandlambda: self.apply_filter(to_binary)).pack(sidetk.LEFT, padx2) tk.Button(toolbar, text保存结果, commandself.save_result).pack(sidetk.LEFT, padx2) body tk.Frame(self.root) body.pack(filltk.BOTH, expandTrue) self.original_label tk.Label(body, text原图, bg#f0f0f0) self.original_label.pack(sidetk.LEFT, filltk.BOTH, expandTrue, padx5, pady5) self.result_label tk.Label(body, text处理结果, bg#f0f0f0) self.result_label.pack(sidetk.RIGHT, filltk.BOTH, expandTrue, padx5, pady5) def open_image(self): 打开并显示图片。 path filedialog.askopenfilename( filetypes[(图片文件, *.jpg *.jpeg *.png *.bmp *.*)] ) if not path: return try: self.original load_image(path) self.result self.original.copy() self._show_image(self.original, self.original_label, original) self._show_image(self.result, self.result_label, result) except Exception as exc: messagebox.showerror(打开失败, str(exc)) def apply_filter(self, func): 对当前结果图应用指定滤镜。 if self.original is None: messagebox.showwarning(提示, 请先打开一张图片) return try: self.result func(self.result) self._show_image(self.result, self.result_label, result) except Exception as exc: messagebox.showerror(处理失败, str(exc)) def save_result(self): 保存处理结果。 if self.result is None: messagebox.showwarning(提示, 没有可保存的结果图像) return path filedialog.asksaveasfilename( defaultextension.png, filetypes[(PNG, *.png), (JPEG, *.jpg), (BMP, *.bmp)] ) if path: save_image(self.result, path) messagebox.showinfo(完成, f图片已保存到{path}) def _show_image(self, img: np.ndarray, label: tk.Label, tag: str): 把 OpenCV 图像显示到 Tkinter Label 中。 if img.ndim 2: # 灰度图 rgb_img cv2.cvtColor(img, cv2.COLOR_GRAY2RGB) else: rgb_img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) pil_img Image.fromarray(rgb_img) # 缩放显示避免图片过大撑爆窗口 pil_img.thumbnail((440, 480)) photo ImageTk.PhotoImage(pil_img) if tag original: self.original_photo photo else: self.result_photo photo label.config(imagephoto, text)入口文件main.py# 文件路径mini_ps/main.py import tkinter as tk from ui.app import MiniPsApp def main(): root tk.Tk() app MiniPsApp(root) root.mainloop() if __name__ __main__: main()4.5 运行与验证在项目根目录执行python main.py预期效果点击“打开图片”选择一张本地 JPG 或 PNG左侧显示原图。点击“灰度化”右侧变为黑白图。点击“高斯模糊”右侧继续模糊且不影响左侧原图。点击“边缘检测”右侧显示轮廓线条。点击“保存结果”把处理后的图片导出到本地。我这里实际跑过一条最简单的链路打开图片 - 灰度化 - 高斯模糊 - 保存整个过程没有任何报错界面响应也流畅。有一点需要说明这个工具目前没有实现撤销功能和多级历史记录所以对图片反复应用滤镜会产生叠加效果。如果希望支持撤销可以维护一个history栈每次处理前把当前图像压栈这是一个非常适合作为 AI 辅助开发练习的扩展点。5. 进阶AI 如何帮我们“重做”视频与排版工具5.1 视频剪辑方向视频处理工具的复杂度比图像处理高很多但 AI 辅助开发依然能大幅降低起点。比如用 FFmpeg 作为底层引擎AI 可以帮助生成命令行调用封装。向 AI 提问请用 Python 的 subprocess 封装 FFmpeg实现视频剪辑和转码 1. cut_video(input, output, start, duration) 2. compress_video(input, output, bitrate) 3. extract_audio(input, output)生成结果的逻辑通常如下import subprocess def cut_video(input_path: str, output_path: str, start: str, duration: str): cmd [ ffmpeg, -y, -i, input_path, -ss, start, -t, duration, -c, copy, output_path ] subprocess.run(cmd, checkTrue) def compress_video(input_path: str, output_path: str, bitrate: str 1M): cmd [ ffmpeg, -y, -i, input_path, -b:v, bitrate, output_path ] subprocess.run(cmd, checkTrue) def extract_audio(input_path: str, output_path: str): cmd [ ffmpeg, -y, -i, input_path, -vn, -c:a, aac, output_path ] subprocess.run(cmd, checkTrue)再通过 Tkinter 或 PySide6 封装成带进度条的图形界面就是一个简化版的视频剪辑入口。5.2 矢量图形方向Illustrator 的替代开发同样可行。Python 生态里有 svgwrite、drawsvg 等库AI 可以根据文字描述生成 SVG 文件。向 AI 提问请用 Python 和 svgwrite 生成一个简约 logo包含一个圆形、一个三角形和文字 AI Studio。AI 生成的代码可运行后会输出 SVG 文件浏览器直接打开就能预览。这个思路可以继续扩展成图形编辑器画布拖拽、节点编辑、路径计算等AI 在数据结构设计上能帮上大忙。5.3 排版与 PDF 方向InDesign 的替代方向是 Typst、Paged.js 和 PyMuPDF。AI 可以把一份简历数据渲染成 PDF# 使用 PyMuPDF 生成带标题和正文的 PDF 文档 import fitz doc fitz.open() page doc.new_page() page.insert_text((72, 72), AI 生成文档标题, fontsize16, fontnamechina-s) page.insert_text((72, 108), 这是一段由脚本生成的正文内容。, fontsize12) doc.save(output.pdf)这里要注意china-s字体是否存在取决于本机字体库不同平台需要按实际环境调整。AI 辅助生成代码时最好同时问一句“如果中文字体显示异常应该如何检查和安装字体”。6. 常见问题与排查思路无论你是直接复制本文代码还是自己用 AI 生成代码都可能遇到下面这些问题。问题现象常见原因解决思路打开图片后界面显示蓝色调OpenCV 读取的是 BGRTkinter 需要 RGB使用cv2.cvtColor(img, cv2.COLOR_BGR2RGB)转换点击滤镜按钮没有反应尚未打开图片或滤镜函数抛异常先执行“打开图片”在apply_filter中加异常捕获图片太大界面卡死未对预览图做缩放用thumbnail缩小到固定尺寸再显示控制台报缺少模块依赖未安装完整执行pip install opencv-python pillow numpy边缘检测结果全黑图片本身就是灰度且对比度低调低 Canny 低阈值或先执行灰度化和亮度增强中文字体显示为方块系统缺少对应字体或 PDF 字体设置错误下载字体文件并设置fontname或改用系统自带中文 TTF 路径反复处理图像质量持续下降没有保存原始帧每次对上一结果继续处理维护原始图像副本每次处理从原始图开始再展开说明两个高频问题。6.1 Tkinter 界面明明有图片却显示空白这个问题很常见。原因通常是在_show_image里创建的ImageTk.PhotoImage对象被垃圾回收了。Tkinter 的底层机制要求必须保持一个全局或实例引用否则图片不显示。解决方案就是在__init__中增加属性self.original_photo None self.result_photo None然后在_show_image中赋值给这两个属性。这属于 Tkinter 的经典坑AI 生成的代码未必会自动处理需要开发者理解原理后修正。6.2 OpenCV 的 “shape” 和 PIL 的 “size” 混淆在 MRO 和图像尺寸处理时很多初学者会混淆OpenCV 的img.shape返回(高, 宽, 通道数)。PIL 的img.size返回(宽, 高)。AI 生成代码时如果混用这两个接口会导致旋转、裁剪方向错乱。建议在代码里增加注释明确标注“这里高在前宽在后”。7. 最佳实践与工程建议7.1 把需求拆到 AI 能理解的最小单元AI 辅助开发能否成功很大程度取决于你怎么提需求。推荐的做法是把一个完整软件拆成多个“函数级需求”逐个让 AI 实现。比如“写一个读取图片的函数返回 numpy 数组”“写一个函数把图片按指定比例缩小”“写一个函数在 Tkinter 界面中显示 OpenCV 图片”每一条需求都足够具体AI 生成的代码质量会明显更高。7.2 让 AI 改代码而不是从零生成很多时候AI 第一次生成的代码并不完全正确。不要反复让它重写整个文件而是针对错误反馈让它修改。比如我运行 gaussian_blur 时报错 ksize must be positive and odd。请检查函数如果 ksize 是偶数自动加 1 后再调用 cv2.GaussianBlur。这样既保留整体结构又修复具体问题效率更高。7.3 重视测试和边界条件设计软件涉及大量边界条件读不存在的文件、裁剪区域超出图片范围、旋转角度为负数、图像通道数不一致等。AI 生成的代码通常只处理“正常路径”你需要主动补充异常测试。在我的项目中至少应该覆盖文件不存在时的报错信息是否清晰空数组输入是否会导致崩溃裁剪坐标越界时如何保护保存目标目录不存在时是否需要自动创建建议给每个函数写一个简单的if __name__ __main__测试块验证基础行为。7.4 合规与品牌边界如果你真的参与开源替代项目要特别注意项目名称、Logo、图标不要模仿 Adobe 品牌。代码不要直接复制 Adobe 软件中的专有算法实现。文档和宣传语避免暗示“官方替代品”或“授权版本”。如果使用了 GPL 协议的开源代码注意自己的开源义务。AI 辅助开发应该用于创造新的工具而不是复制商业产品的外观和资产。8. 总结AI 改变的不是软件而是软件开发方式Adobe“饭碗不保”的讨论短期内更多是媒体情绪的放大。真正值得关注的是 AI 让独立开发者具备了挑战大型设计软件的能力。从本文的迷你 Photoshop 项目可以看到一个普通工程师借助 AI可以在一个周末内完成基础图像处理工具的核心功能这在以前是不可想象的。下一步如果你对这个方向感兴趣建议沿着三条线继续深入第一完善这个小工具增加图层、蒙版、撤销和历史记录功能。第二尝试接入更多开源算法比如人脸识别、智能抠图、超分辨率重建。第三把开发过程整理成文档记录 AI 生成的代码和你修改的部分形成自己的 AI 辅助开发方法论。工具永远在迭代但设计软件真正值钱的不是代码而是对用户需求的理解、稳定的交互体验和完整的创作生态。AI 负责把想法变成代码而你负责决定这些代码该做成什么样子。这就是未来设计工具开发者最核心的竞争力。如果这篇文章对你有帮助可以收藏备用也欢迎在评论区分享你用 AI 开发过的创意工具。下次遇到“重做 XX 软件”之类的选题不妨先动手做一个小 Demo。

相关新闻

ASO优化实力品牌怎么选:从关键词到转化闭环的筛选指南

ASO优化实力品牌怎么选:从关键词到转化闭环的筛选指南

做应用推广这些年,我接触最多的词就是ASO优化。不管你的产品是新上架还是已经跑了一年,应用商店的搜索结果、榜单位置、详情页转化,都直接决定自然量的大小。很多人一听说某个品牌擅长ASO优化,第一反应是“那家能帮我冲榜吗”&…

2026/10/14 21:38:32 阅读更多 →
无人自助拼豆系统核心逻辑实现与全流程部署实战操作指南

无人自助拼豆系统核心逻辑实现与全流程部署实战操作指南

无人自助拼豆系统概述 无人自助拼豆系统是一种基于物联网与软件开发技术的智能设备管理系统,旨在为用户提供便捷的拼豆服务。该系统通常包括用户端、管理后台及硬件设备之间的交互逻辑,实现从用户操作到数据处理的全流程自动化。通过结合Spring Boot、My…

2026/10/14 21:38:32 阅读更多 →
深入解析 CMake 缓存机制:删掉 CMakeCache.txt 与 CMakeFiles/ 的正确时机

深入解析 CMake 缓存机制:删掉 CMakeCache.txt 与 CMakeFiles/ 的正确时机

先说一个近乎人人遇过的场景:白天还好好的 CMake 工程,下午一改CMakeLists.txt,再一编译就开始闹脾气——头文件找不到、链接器报一堆 undefined reference、甚至改动完全没有生效。这时候老手多半会不动声色抛出千古名句:“把 CM…

2026/10/14 21:38:32 阅读更多 →

最新新闻

SQL注入本质:输入未过滤、拼接未隔离、权限未收敛

SQL注入本质:输入未过滤、拼接未隔离、权限未收敛

1. 这不是“黑进网站”的速成课,而是你真正该懂的SQL注入本质很多人看到“SQL注入”四个字,第一反应是黑客电影里飞速滚动的代码、被攻破的数据库、管理员惊恐的脸——这种刻板印象害了不少人。我带过不少刚入门的安全学习者,他们花大量时间背…

2026/10/14 22:29:55 阅读更多 →
Radioss时间步长(Time Step)

Radioss时间步长(Time Step)

上一期我们在讲显示和隐式积分法时,我们可以看到时间步长△t 在数值计算时比较重要的变量。尤其对于显式积分法,需要时间步长尽量小,这样数值计算的结果就越精确,当然时间步长越小需要的计算时间越长,选择合适的时间步…

2026/10/14 22:29:55 阅读更多 →
2026-2032年电网电池储能年复合增长率5.6%,行业增长趋势明确

2026-2032年电网电池储能年复合增长率5.6%,行业增长趋势明确

在双碳全球共识持续深化的当下,新型电力系统的刚性调节缺口正在持续放大,电网侧电池储能已经从过去的可选配套设施升级为支撑高比例新能源消纳的核心基础设施。根据CNESA公开权威统计数据,截至2022年底全球已投运电力储能项目累计装机规模达2…

2026/10/14 22:29:55 阅读更多 →
Electron+Vue桌面小票打印实战:IPC链路与58mm模板对齐

Electron+Vue桌面小票打印实战:IPC链路与58mm模板对齐

简介:面向用 Electron 与 Vue CLI 3 开发桌面打印功能的前端工程师,这份 demo 以完整小票打印为例,演示如何在渲染进程中触发打印、读取本地 electron-store 中的打印机配置,并在未设置时弹出配置框、设置后静默输出,覆…

2026/10/14 22:29:55 阅读更多 →
2026知识类短视频配音怎么做?4种文字转语音方案对比

2026知识类短视频配音怎么做?4种文字转语音方案对比

制作知识类短视频,文案决定内容是否有价值,配音则影响观众能否顺畅接收信息。如果不想每次都自己录音,可以借助文字转语音工具,将整理好的讲解稿转换成旁白。但知识视频和普通娱乐视频不同,通常更重视发音清晰、内容连…

2026/10/14 22:29:55 阅读更多 →
Windows 上运行 ipmitool 1.8.19 的完整指南:从依赖配置到自动化脚本

Windows 上运行 ipmitool 1.8.19 的完整指南:从依赖配置到自动化脚本

简介:IPMITool 1.8.19 for Windows 是一款面向企业 IT 运维人员与服务器管理员的命令行工具,用于通过 IPMI 协议在本地或远程监控、管理兼容服务器硬件。它独立于操作系统运行,可在系统崩溃或无法启动时完成电源控制、硬件诊断与固件升级&…

2026/10/14 22:28:55 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →