当前位置: 首页 > wzjs >正文

设计的有趣的网站推荐苏州相城区做网站公司

设计的有趣的网站推荐,苏州相城区做网站公司,wordpress禁止响应,wordpress 评论回复邮件通知前言 本系统通过 Laravel 作为前端框架接收用户上传的图片,调用 Python 脚本处理水印添加,最终返回处理后的图片。这种架构充分利用了 Laravel 的便捷性和 Python 图像处理库的强大功能。 一、Python 水印处理脚本 from PIL import Image, ImageEnhance …

前言

本系统通过 Laravel 作为前端框架接收用户上传的图片,调用 Python 脚本处理水印添加,最终返回处理后的图片。这种架构充分利用了 Laravel 的便捷性和 Python 图像处理库的强大功能。

一、Python 水印处理脚本

from PIL import Image, ImageEnhance
import fitz
import io
import sys
import os
import logging
import traceback# 配置日志记录
logging.basicConfig(level=logging.INFO,format='%(asctime)s - %(levelname)s - %(message)s',filename='watermark_process.log'
)def compress_image(image, quality=85, max_size=(1920, 1920)):"""压缩图片尺寸和质量"""try:if image.size[0] > max_size[0] or image.size[1] > max_size[1]:image.thumbnail(max_size, Image.Resampling.LANCZOS)logging.info(f"图片已压缩至尺寸: {image.size}")return imageexcept Exception as e:logging.error(f"图片压缩失败: {str(e)}")raisedef add_watermark_on_top(image_path, pdf_watermark_path, output_path):"""将水印清晰地覆盖整个图片"""try:logging.info(f"开始处理图片: {image_path}")# 检查文件是否存在if not os.path.exists(image_path):error_msg = f"找不到图片文件: {image_path}"logging.error(error_msg)raise FileNotFoundError(error_msg)if not os.path.exists(pdf_watermark_path):error_msg = f"找不到水印文件: {pdf_watermark_path}"logging.error(error_msg)raise FileNotFoundError(error_msg)# 打开并压缩原始图片base_image = Image.open(image_path)logging.info(f"原始图片格式: {base_image.format}, 尺寸: {base_image.size}")base_image = compress_image(base_image)# 打开PDF水印pdf_doc = fitz.open(pdf_watermark_path)page = pdf_doc[0]logging.info(f"PDF水印已加载,页数: {len(pdf_doc)}")# 使用更高分辨率转换PDF水印mat = fitz.Matrix(8, 8)watermark_pix = page.get_pixmap(matrix=mat, alpha=True)watermark_bytes = watermark_pix.tobytes("png")watermark_image = Image.open(io.BytesIO(watermark_bytes))logging.info(f"水印图片已转换,尺寸: {watermark_image.size}")# 确保图片模式正确if base_image.mode != 'RGBA':base_image = base_image.convert('RGBA')logging.info("原始图片已转换为RGBA模式")if watermark_image.mode != 'RGBA':watermark_image = watermark_image.convert('RGBA')logging.info("水印图片已转换为RGBA模式")# 将水印调整为与原图完全相同的尺寸watermark_image = watermark_image.resize(base_image.size, Image.Resampling.LANCZOS)logging.info(f"水印已调整为图片尺寸: {base_image.size}")# 增强水印的不透明度watermark_data = list(watermark_image.getdata())enhanced_data = []for item in watermark_data:if item[3] > 0:  # 如果像素不是完全透明的enhanced_data.append((item[0], item[1], item[2], min(255, int(item[3] * 2))))else:enhanced_data.append(item)watermark_image.putdata(enhanced_data)logging.info("水印不透明度已增强")# 创建新的图层并合成result = Image.new('RGBA', base_image.size, (0,0,0,0))result.paste(base_image, (0,0))result.paste(watermark_image, (0,0), watermark_image)logging.info("图片与水印已合成")# 确保输出目录存在output_dir = os.path.dirname(output_path)if not os.path.exists(output_dir):os.makedirs(output_dir, exist_ok=True)logging.info(f"创建输出目录: {output_dir}")# 保存结果result.save(output_path, 'PNG', quality=85, optimize=True)logging.info(f"处理后的图片已保存至: {output_path}")# 关闭PDF文档pdf_doc.close()return output_pathexcept Exception as e:error_msg = f"处理过程中出现错误:{str(e)}"logging.error(error_msg)logging.error(traceback.format_exc())  # 记录完整的堆栈信息return Nonedef main():try:logging.info("===== 开始新的水印处理任务 =====")if len(sys.argv) != 4:error_msg = "参数数量错误,使用方法: python add_watermark.py 输入图片路径 水印PDF路径 输出图片路径"logging.error(error_msg)print(error_msg)return 1input_image = sys.argv[1]watermark_pdf = sys.argv[2]output_image = sys.argv[3]logging.info(f"接收到命令行参数: 输入={input_image}, 水印={watermark_pdf}, 输出={output_image}")result = add_watermark_on_top(input_image, watermark_pdf, output_image)if result:success_msg = f"处理成功,输出文件:{result}"logging.info(success_msg)print(success_msg)return 0else:error_msg = "处理失败,详情请查看日志文件"logging.error(error_msg)print(error_msg)return 1except Exception as e:logging.critical(f"程序崩溃: {str(e)}")logging.critical(traceback.format_exc())print(f"程序异常终止: {str(e)}")return 1if __name__ == "__main__":sys.exit(main())

二、Laravel 后端集成

<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Log;
use Symfony\Component\Process\Process;
use Symfony\Component\Process\Exception\ProcessFailedException;class WatermarkController extends Controller
{/*** 添加水印到图片*/public function addWatermark(Request $request){// 验证请求$request->validate(['image' => 'required|image|mimes:jpeg,png,jpg,gif|max:2048',]);try {// 存储上传的图片$imagePath = $request->file('image')->store('temp', 'public');$imageFullPath = storage_path('app/public/' . $imagePath);Log::info("图片已上传: {$imageFullPath}");// 水印 PDF 路径$watermarkPdfPath = public_path('watermark.pdf');if (!file_exists($watermarkPdfPath)) {throw new \Exception("水印文件不存在: {$watermarkPdfPath}");}// 准备输出路径$outputFileName = 'watermarked_' . time() . '.' . $request->file('image')->extension();$outputPath = 'temp/' . $outputFileName;$outputFullPath = storage_path('app/public/' . $outputPath);// 执行 Python 脚本$pythonPath = env('PYTHON_PATH', 'python3'); // 配置 Python 路径$scriptPath = base_path('scripts/add_watermark.py');$process = new Process([$pythonPath,$scriptPath,$imageFullPath,$watermarkPdfPath,$outputFullPath]);$process->run();// 检查执行结果if (!$process->isSuccessful()) {Log::error("Python 脚本执行失败: " . $process->getErrorOutput());throw new ProcessFailedException($process);}$output = $process->getOutput();Log::info("Python 脚本输出: {$output}");// 检查输出文件是否存在if (!file_exists($outputFullPath)) {throw new \Exception("处理后的图片不存在,可能 Python 脚本执行失败");}// 返回处理后的图片 URL$imageUrl = Storage::url($outputPath);return response()->json(['success' => true,'message' => '水印添加成功','image_url' => $imageUrl]);} catch (\Exception $e) {Log::error("添加水印失败: " . $e->getMessage());return response()->json(['success' => false,'message' => '处理过程中出错: ' . $e->getMessage()], 500);}}
}

三、环境配置

在 .env 文件中添加 Python 路径配置:

PYTHON_PATH=python3  # 根据实际环境修改

四、错误调试指南

1. Python 脚本调试

日志文件: 查看 watermark_process.log 获取详细处理过程
命令行测试: 直接通过命令行执行 Python 脚本测试

python3 scripts/add_watermark.py /path/to/input.jpg /path/to/watermark.pdf /path/to/output.png

2. Laravel 调试

日志检查: 查看 storage/logs/laravel.log
异常信息: 捕获并记录完整的异常堆栈
权限问题: 确保 storage 目录可写
Python 路径: 确认 .env 中的 PYTHON_PATH 配置正确

3. 常见错误及解决方案

错误信息可能原因解决方案
找不到图片文件文件路径错误或权限不足检查文件路径和权限
Python 脚本执行失败Python 环境问题或依赖缺失确认 Python 路径和依赖(如 PyMuPDF、Pillow)
处理后的图片不存在Python 脚本内部错误查看 Python 日志文件获取详细信息

五、部署注意事项

1、Python 依赖安装:

pip install pillow pymupdf

2、文件权限设置:

chmod -R 755 storage/
chmod -R 755 bootstrap/cache/

3、Nginx 配置:确保上传文件大小限制足够大:

client_max_body_size 20M;

通过以上方案,你可以实现一个完整的 Laravel + Python 图片水印系统,并具备完善的错误调试能力。这种架构既发挥了 Laravel 的 Web 开发优势,又利用了 Python 在图像处理领域的强大生态。


文章转载自:

http://YN5cie9z.wsdjn.cn
http://WobvOaPL.wsdjn.cn
http://oxvkZMG6.wsdjn.cn
http://MfRaYfbZ.wsdjn.cn
http://sFzFdbdT.wsdjn.cn
http://kbDZR7tU.wsdjn.cn
http://5VJKHJbu.wsdjn.cn
http://SD9YwlPu.wsdjn.cn
http://w3SCxbpb.wsdjn.cn
http://SAIsWsrU.wsdjn.cn
http://bHtP59P1.wsdjn.cn
http://TP1X3ymD.wsdjn.cn
http://6W2uf61S.wsdjn.cn
http://hrS0a8Hm.wsdjn.cn
http://Mpg1DHlW.wsdjn.cn
http://0v14ueS7.wsdjn.cn
http://BAlpsPGZ.wsdjn.cn
http://6HHR9Vjs.wsdjn.cn
http://UrlcMDOk.wsdjn.cn
http://Fh3uw65q.wsdjn.cn
http://c9hp2qe2.wsdjn.cn
http://80sV2trY.wsdjn.cn
http://5dVC343Y.wsdjn.cn
http://MVLyjLct.wsdjn.cn
http://jPlDZoDD.wsdjn.cn
http://wUGa3Ixt.wsdjn.cn
http://4CpEwFQi.wsdjn.cn
http://EgJUFp5b.wsdjn.cn
http://lc6zx9lq.wsdjn.cn
http://t6pexYvP.wsdjn.cn
http://www.dtcms.com/wzjs/671276.html

相关文章:

  • 网站怎么查是哪家网络公司做的网站建设算入会计分录
  • 购物网站app开发wordpress如何应用ssl
  • 阿里巴巴网站基础建设首保服务修改 自豪地采用wordpress
  • 聊城做网站的公司策划虚拟主机建立网站
  • 帮网贷做网站会判刑吗哪里创建免费的网站
  • 零食网站建设规划书我的百度账号登录
  • 荆门哪里有专门做企业网站的网站制作群系统
  • 陕西网站开发公司哪家好wordpress forum
  • 网站建设都需要什么技术人员帝国cms 网站名称
  • 燕郊个人网站建设淘客如何做网站推广
  • wordpress站点是什么小广告清理
  • 怎样购买网站域名建立组词
  • 厦门定制型网站建设轻设计 让网站灵敏轻便的6个技巧
  • 大型网站建设企业名录模板做网站联盟
  • 临西做网站报价wordpress安装 503
  • 山西建设公司网站做个外贸网站设计
  • 公司网站优点营销网站建设资料
  • 沈阳优化网站关键词微信公众号平台官网
  • 扶风做企业网站上海房价2022年最新房价
  • 2017年做那个网站致富人力资源网站建设计划书
  • 上海市建设执业资格注册中心网站wordpress 彩色标签云插件
  • 网站举报官网建设企业网站的好处是什么
  • 建构网站西安网站建设设计风格描述
  • 韩国有哪些做潮牌的网站免费网站建设找云狄
  • 南宁网站建设费用成都网站建设维护
  • 网站备案个人信息效果图工作室
  • 网页设计与网站建设完全学习手册网站加速cdn自己做
  • 谁给推荐一个免费的好网站域名没有网站可以备案
  • 有专门做最佳推荐的网站现在制作网页用什么软件
  • 领优惠券的网站怎么建设的微信订单网站模版