news 2026/5/14 18:44:17

【办公类-130-01】20260510豆包图片去文字水印(叠图))

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【办公类-130-01】20260510豆包图片去文字水印(叠图))

背景需求

搭档要做一个“教师讲故事比赛”的PPT背景。

四选一,搭档选了一张好看的,这是纯图片,不能修改的。直接放到PPT里。

然后搭档又想了想,又选了一张左下图,但是要消除“活动方案几个字”

我把这张图单独提出来,要求去掉“活动方案”字样,但是最终,缺了标题

用正确的标题和副标题重新做一张

重新做图片,图案又不一样了。最后搭档选了右下角一张

第二天,搭档说删掉“教师变成青年教师”

然后搭档提出一个需求——不要水印

我问问手机“千问”,是否可以去掉水印

这里面提到的“豆包付费”可以文字水印,我不想花线,同时也提到的网页“检查”模式下找图片的地址。

把两张图片下载,

1、普通下载的图片右下角有“豆包AI生成”,

2、网页检查模式下载的图片左上角有“AI生成”

虽然都有水印文字,但是在不同的位置上,所以可以裁剪拼图

如果我不想用PPT裁剪,是否可以做一个Python程序,批量做图。

测试图片

''' 豆包图片有水印 下载网页上的图片+下载网页-检查-src的图片,重叠合并,切掉左上角的水印 Deepseek、阿夏 20260511 ''' from PIL import Image import os def process_images(): # 定义路径 folder_path = r"C:\Users\jg2yXRZ\OneDrive\桌面\20260511豆包重叠去水印" subfolder_path = os.path.join(folder_path, "00图片") # 获取00图片文件夹中的所有图片文件 image_extensions = ['.jpg', '.jpeg', '.png', '.bmp', '.tiff'] images = [] for file in os.listdir(subfolder_path): if any(file.lower().endswith(ext) for ext in image_extensions): images.append(os.path.join(subfolder_path, file)) # 确保图片数量是双数 if len(images) % 2 != 0: print(f"警告:图片数量为{len(images)},不是双数!") return if len(images) < 2: print("图片数量不足2张") return # 读取第一张图片 first_img_path = images[0] first_img = Image.open(first_img_path) print(f"第一张图片: {first_img_path}") print(f"第一张图片尺寸: {first_img.size}") # 读取第二张图片 second_img_path = images[1] second_img = Image.open(second_img_path) print(f"第二张图片: {second_img_path}") print(f"第二张图片尺寸: {second_img.size}") # 获取第二张图片的尺寸 second_width, second_height = second_img.size # 定义要裁剪的区域:从(100,100)到图片的宽度和高度 # 确保裁剪区域在图片范围内 crop_x1 = min(200, second_width) crop_y1 = min(200, second_height) crop_x2 = second_width crop_y2 = second_height if crop_x1 >= crop_x2 or crop_y1 >= crop_y2: print("错误:裁剪区域无效,起始点超出了图片范围") return # 裁剪第二张图片的指定区域 cropped_region = second_img.crop((crop_x1, crop_y1, crop_x2, crop_y2)) print(f"裁剪区域尺寸: {cropped_region.size}") # 获取裁剪后区域的尺寸 crop_width, crop_height = cropped_region.size # 确保裁剪区域尺寸不超过第一张图片 first_width, first_height = first_img.size if crop_width > first_width or crop_height > first_height: print(f"警告:裁剪区域({crop_width}x{crop_height})大于第一张图片({first_width}x{first_height})") # 调整裁剪区域大小以适应第一张图片 cropped_region = cropped_region.resize((min(crop_width, first_width), min(crop_height, first_height))) crop_width, crop_height = cropped_region.size # 计算右下角对齐的位置 paste_x = first_width - crop_width paste_y = first_height - crop_height print(f"粘贴位置: ({paste_x}, {paste_y})") # 将裁剪区域粘贴到第一张图片上 # 创建一个副本,避免修改原图 result_img = first_img.copy() result_img.paste(cropped_region, (paste_x, paste_y)) # 保存结果图片 output_path = os.path.join(folder_path, "000.jpg") result_img.save(output_path, "JPEG", quality=95) print(f"图片已保存到: {output_path}") # 显示结果信息 print(f"\n处理完成!") print(f"原第一张图片尺寸: {first_width}x{first_height}") print(f"从第二张图片裁剪: 从({crop_x1},{crop_y1})到({crop_x2},{crop_y2})") print(f"粘贴后图片尺寸: {result_img.size}") if __name__ == "__main__": try: process_images() except Exception as e: print(f"处理过程中出现错误: {e}") # 如果需要更详细的错误信息,可以取消下面的注释 # import traceback # traceback.print_exc()

虽然可以通过Python拼合做出无水印的豆包图片,但是人工下载图片比较繁琐,最好是爬虫下载两套图片。再进行拼图。

生成图片

爬虫下载这四张图片

import os import requests from bs4 import BeautifulSoup from urllib.parse import urljoin, urlparse import time from pathlib import Path def download_images_from_page(url, save_folder="downloaded_images"): """ 下载网页上的所有图片 Args: url: 要爬取的网页地址 save_folder: 保存图片的文件夹名称 """ # 创建保存图片的文件夹 if not os.path.exists(save_folder): os.makedirs(save_folder) # 设置请求头,模拟浏览器访问 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' } try: # 发送请求获取网页内容 print(f"正在访问: {url}") response = requests.get(url, headers=headers, timeout=10) response.raise_for_status() # 检查请求是否成功 # 解析HTML soup = BeautifulSoup(response.text, 'html.parser') # 查找所有img标签 img_tags = soup.find_all('img') print(f"找到 {len(img_tags)} 个图片标签") downloaded_count = 0 for i, img in enumerate(img_tags): # 获取图片URL(优先使用src,如果没有则尝试data-src等) img_url = img.get('src') or img.get('data-src') or img.get('data-original') if not img_url: continue # 拼接完整的URL if not img_url.startswith('http'): img_url = urljoin(url, img_url) # 获取图片文件名 parsed_url = urlparse(img_url) img_name = os.path.basename(parsed_url.path) # 如果没有扩展名,尝试从Content-Type获取 if not img_name or '.' not in img_name: img_name = f"image_{i+1}.jpg" # 确保文件名安全(移除特殊字符) img_name = "".join(c for c in img_name if c.isalnum() or c in '.-_') if not img_name: img_name = f"image_{i+1}.jpg" # 完整的保存路径 save_path = os.path.join(save_folder, img_name) try: # 下载图片 print(f"正在下载: {img_url}") img_response = requests.get(img_url, headers=headers, timeout=10) img_response.raise_for_status() # 保存图片 with open(save_path, 'wb') as f: f.write(img_response.content) downloaded_count += 1 print(f"✓ 已保存: {img_name} (大小: {len(img_response.content)} bytes)") # 添加延迟,避免请求过快 time.sleep(0.5) except Exception as e: print(f"✗ 下载失败 {img_url}: {e}") print(f"\n完成!共下载 {downloaded_count} 张图片,保存到 '{save_folder}' 文件夹") except Exception as e: print(f"访问网页失败: {e}") def download_images_with_selenium(url, save_folder="downloaded_images"): """ 使用Selenium处理动态加载的页面(如果需要) 需要先安装: pip install selenium 还需要下载对应的浏览器驱动 """ try: from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC except ImportError: print("请先安装selenium: pip install selenium") return # 创建保存图片的文件夹 if not os.path.exists(save_folder): os.makedirs(save_folder) # 设置Chrome选项 options = webdriver.ChromeOptions() options.add_argument('--headless') # 无头模式,不显示浏览器窗口 options.add_argument('--disable-gpu') options.add_argument('--no-sandbox') driver = webdriver.Chrome(options=options) try: print(f"正在访问: {url}") driver.get(url) # 等待页面加载完成 wait = WebDriverWait(driver, 10) wait.until(EC.presence_of_element_located((By.TAG_NAME, "img"))) # 滚动页面,触发懒加载的图片 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(2) # 获取所有图片元素 img_elements = driver.find_elements(By.TAG_NAME, "img") print(f"找到 {len(img_elements)} 个图片元素") downloaded_count = 0 for i, img in enumerate(img_elements): img_url = img.get_attribute('src') or img.get_attribute('data-src') if not img_url or 'data:image' in img_url: continue # 获取图片文件名 img_name = f"image_{i+1}.jpg" save_path = os.path.join(save_folder, img_name) try: print(f"正在下载: {img_url}") response = requests.get(img_url, timeout=10) response.raise_for_status() with open(save_path, 'wb') as f: f.write(response.content) downloaded_count += 1 print(f"✓ 已保存: {img_name}") time.sleep(0.3) except Exception as e: print(f"✗ 下载失败: {e}") print(f"\n完成!共下载 {downloaded_count} 张图片") finally: driver.quit() if __name__ == "__main__": # 要下载的网页地址(你的CSDN编辑页面) # 注意:CSDN编辑页面通常需要登录才能访问 target_url = "https://www.doubao.com/chat/38425461077570050?channel=cnblogs" print("=" * 50) print("图片批量下载工具") print("=" * 50) # 方式1:使用简单的requests方法 print("\n方式1:使用requests方法下载") download_images_from_page(target_url, "csdn_images") # 方式2:如果需要处理动态加载的内容,使用selenium # print("\n方式2:使用selenium方法下载") # download_images_with_selenium(target_url, "csdn_images_selenium")

如果我不想装插件,就无法下载无水印(感觉现在豆包收费后,不可能再让我们用插件获取无水印图片)

爬虫爬不了动态网页的图片,所以我还是不能批量下载图片,只能手工拼合“少量图片”

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/14 18:42:30

Python Redis客户端实战:redis-py深度解析

Python Redis客户端实战&#xff1a;redis-py深度解析 引言 在Python开发中&#xff0c;Redis是构建高性能缓存和数据存储的核心技术。作为一名从Rust转向Python的后端开发者&#xff0c;我深刻体会到redis-py在Redis操作方面的优势。redis-py提供了简洁的API和丰富的功能&…

作者头像 李华
网站建设 2026/5/14 18:39:06

量子通信与6G融合:探索未来通信新维度

量子通信与6G融合&#xff1a;探索未来通信新维度 在当今科技飞速发展的时代&#xff0c;通信技术作为连接世界的桥梁&#xff0c;正经历着前所未有的变革。从1G到5G&#xff0c;每一代通信技术的演进都极大地推动了社会进步&#xff0c;而今&#xff0c;6G的研发与探索正悄然拉…

作者头像 李华
网站建设 2026/5/14 18:36:13

2026年文生图片最好的软件横评:6款实测,第1名出乎意料

摘要&#xff1a; 想找文生图片最好的软件&#xff1f;别被营销话术带跑偏。本文实测6款主流文生图片软件&#xff0c;从出图质量、免费程度、操作门槛到商用适配逐一拆解&#xff0c;直接告诉你哪款真的值得用&#xff0c;哪款只是看起来好看。其中有一款"三万同款"…

作者头像 李华
网站建设 2026/5/14 18:35:58

告别Canvas截图!用MediaProjection+Kotlin协程打造高性能屏幕流处理工具

构建高性能Android屏幕流处理框架&#xff1a;MediaProjection与Kotlin协程深度实践 在移动应用开发中&#xff0c;屏幕内容捕获技术正从简单的截图功能演变为复杂的实时流处理系统。传统基于Canvas的截图方案存在明显局限性——无法捕获系统UI层、视频播放内容&#xff0c;且性…

作者头像 李华
网站建设 2026/5/14 18:34:56

Taotoken用量看板如何帮助团队精细化管理AI成本

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken用量看板如何帮助团队精细化管理AI成本 对于团队管理者而言&#xff0c;将大模型能力集成到业务中后&#xff0c;一个随之…

作者头像 李华
网站建设 2026/5/14 18:34:56

手把手教你用TiggerRamDisk 3.4绕过iPhone 8的激活锁(MacOS 12.3实测)

在MacOS 12.3环境下解锁iPhone 8激活锁的完整指南 当您从二手市场或朋友那里获得一部带有激活锁的iPhone 8时&#xff0c;可能会感到束手无策。本文将详细介绍如何在MacOS 12.3系统上&#xff0c;通过特定工具和步骤绕过这一限制&#xff0c;让设备重新可用。整个过程不需要专业…

作者头像 李华