AI辅助开发实战:用Python重做一个mini版Photoshop

发布时间:2026/10/14 21:38:24

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。
延伸阅读

更多相关文章

2026/10/14 21:38:24

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

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

2026/10/14 21:33:22

COMSOL三维声表面波驱动液滴模拟:从建模到结果提取全解析

1. 项目概述与核心痛点做微流控数值模拟这几年,声表面波(SAW)驱动液滴一直是个看着简单、做起来坑极多的方向。标题里提到的“comso三维声表面波作用液滴”,实际就是COMSOL Multiphysics里搭三维模型,模拟叉指换能器激…

2026/10/14 21:33:22

大语言模型+接口自动化:从数据生成到失败分析

1. 这个项目到底在解决什么问题先说我观察到的普遍现象。不少团队把接口自动化做成"用例仓库",一开始靠录制工具快速堆出几百条脚本,跑起来绿油油一片,看着很舒心。但上线两个月后就开始变味:接口字段一调整&#xff0c…

2026/10/15 6:08:14

杰理BLE功耗从185uA压到18uA:可复现的降功耗实战笔记

简介:这份PDF资料聚焦杰理BLE芯片的功耗数据与降功耗方法,面向正在开发蓝牙低功耗产品、遇到功耗降不下来或无法满足客户续航要求的嵌入式工程师。内容以AC6321为例,系统梳理powerdown、poweroff、sniff三种功耗模式的特点与唤醒机制&#xf…

2026/10/15 6:08:14

C++与++c:从语言命名到前置自增的语法细节与工程实践

“C 和 c”,这两个词放在一起,乍一看像程序员之间才懂的冷笑话。但如果你真在代码里和它们长期打交道,会发现这个标题里藏着的是一语三关:C 是一门语言名字,c 是一个具体的自增表达式,而把“C”这个单词重新…

2026/10/15 6:08:14

Keras YOLOv3环境搭建实战:版本匹配与依赖安装避坑指南

刚把 yolov3 的环境搭完,准备跑个 demo 验证一下,结果一执行命令就是一连串的报错。折腾了一整天,最后发现全是版本匹配的问题——TensorFlow、Keras、Python 三者之间稍微错一个版本,整个环境就起不来。我估计不少人和我一样&…

2026/10/15 6:08:14

Imatest 图像质量测试教程:从环境搭建到自动化流水线

简介:这份 Imatest 教程面向相机与光学系统的图像质量评估人员、数码影像爱好者及测试工程师,帮助读者看懂 Imatest 输出的专业测试图表,解决色彩倾向、噪声水平与解像力等关键指标难以解读的问题。资源包内含 1 个 doc 文档,压缩…

2026/10/15 6:03:14

3块钱2小时从零训练一个64M参数大语言模型:MiniMind实操指南

1. 先说结论:64M 参数、3块钱、2小时,MiniMind 到底能做些什么?这是“一天一个开源项目”系列的第231篇。今天想聊的这个项目叫 MiniMind,它最有冲击力的点就在标题里:一个只有 64M 参数的大语言模型,从零开…

2026/10/14 11:31:03

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/14 17:41:07

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/14 2:32:55

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/15 0:02:22

防关联浏览器哪个好?三款产品实测差异解析

新手做多店铺,最纠结的就是防关联浏览器选哪个。飞跨、网易、站斧这三款被问得最多,先给结论:要一体化省心、长期便宜,选站斧;要网易招牌和稳,选网易;预算紧做东南亚 Lazada,选飞跨。…

2026/10/15 0:02:22

影刀RPA深度实战:大模型Fine-tuning定制RPA专用Prompt与指令生成

影刀RPA深度实战:大模型Fine-tuning定制RPA专用Prompt与指令生成 一、技术背景 大模型(LLM)在通用场景下表现强大,但当我们将 GPT-4 或 Qwen 直接用于生成影刀RPA操作指令和 XPath 定位时,准确率通常只有 40%-60%。原因…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑