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

python调用PIL库处理图片

        最近在做一个相册类的小项目,其中涉及到用户上传裁剪图片,除了图片形状上的要求,还有亮度、对比度、饱和度以及灰度。项目需求是前端上传是在微信小程序实现,后台用Java写的,最终要实现将上传的图片转成pdf打印出来,微信小程序使用的cropper插件,界面实现的很完美,实在前端标签中为原图设置各种样式和形状,到后台实现图片装pdf的时候,没有找到合适的插件程序实现图片和样式及形状的融合,各种百度,各种尝试之后,最终选择放弃用Java,改用python来完成图片和样式的融合,再通过Java转pdf,话不多说,直接上代码。

项目调用python程序的Java代码:

package com.sxzyq.common.utils;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;public class PythonExecution {public static void main(String[] args) {args=new String[]{"python", "G:\\pythonWorkSpace\\imageProcess.py", "G:\\moni\\11.jpg", "G:\\moni\\157output.png", "2", "2", "2","false", "0.46", "200.5842", "200.21452525"};System.out.println(getPyResult(args));}public static String getPyResult(String[]  args){String str = "";try {Process process = Runtime.getRuntime().exec(args);InputStream inputStream = process.getInputStream();BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));String line;StringBuilder output = new StringBuilder();while ((line = bufferedReader.readLine()) != null) {output.append(line);}str = output.toString();bufferedReader.close();} catch (IOException e) {e.printStackTrace();}return str;}
}

python调用PIL图像处理库的代码:

from PIL import Image, ImageEnhance, ImageDraw
import sysdef change_image_saturation(image_path, output_path, saturation_factor, contrast_factor, brightness_factor, apply_ellipse, grayscale_factor, new_size):try:# Open the imageimage = Image.open(image_path)image = image.resize(new_size)# Apply saturation, contrast, and brightness enhancementsimage = ImageEnhance.Color(image).enhance(saturation_factor)image = ImageEnhance.Contrast(image).enhance(contrast_factor)image = ImageEnhance.Brightness(image).enhance(brightness_factor)# Apply grayscale if grayscale_factor is specifiedif grayscale_factor > 0:enhancer = ImageEnhance.Color(image)image = enhancer.enhance(1 - grayscale_factor)# Apply elliptical mask if condition is Trueif apply_ellipse:# Create a mask with an elliptical shapemask = Image.new("L", image.size, 0)draw = ImageDraw.Draw(mask)draw.ellipse((0, 0, image.width, image.height), fill=255)# Apply the mask to the imageimage.putalpha(mask)# Create a transparent image to hold the final resultoutput_image = Image.new("RGBA", image.size, (0, 0, 0, 0))output_image.paste(image, (0, 0), mask)# Save the output image with transparencyoutput_image.save(output_path, 'PNG')else:# Save the enhanced image without any maskimage.save(output_path)except Exception as e:print(f"An error occurred: {e}")if __name__ == "__main__":# Read command-line argumentsimage_path = sys.argv[1]output_path = sys.argv[2]saturation_factor = float(sys.argv[3])contrast_factor = float(sys.argv[4])brightness_factor = float(sys.argv[5])apply_ellipse = sys.argv[6].lower() == 'true'grayscale_factor = float(sys.argv[7])new_size = (int(round(float(sys.argv[8]))),int(round(float(sys.argv[9]))))# Call the functionchange_image_saturation(image_path, output_path, saturation_factor, contrast_factor, brightness_factor, apply_ellipse, grayscale_factor, new_size)

        亲测用户体验度不错,有相似需求的可以拿着用用。有不明白的可以评论区回复,我会及时回复,咱们一起探讨一起进步。


http://www.mrgr.cn/news/58496.html

相关文章:

  • CMU生成式人工智能大模型:从入门到放弃(九)
  • git清理本地.git文件夹下的缓存
  • TypeScript 知识点全解析(总括):从入门到精通
  • OpenAI低调发布多智能体工具Swarm:让多个智能体协同工作!
  • 听一听语音助手的声音
  • 一文带你搞定Java中的动态代理和静态代理
  • JS轮播图实现自动轮播、悬浮停止轮播、点击切换,下方指示器与图片联动效果
  • 【人工智能】——matplotlib教程
  • 广州企业管理咨询公司排名前十
  • 大尺寸反射式液晶显示模块行业分析:预计2030年全球市场规模将达到2,020.21百万美元
  • echarts给Y轴的不同轴线设置不同的颜色的样式
  • 【OpenAI】第二节(Token)关于ChatGPT的Token你了解多少?最全Token讲解过程!
  • SpringMVC8-HttpMessageConverter
  • 《企业自设2-软件测试》搭建locust环境+使用它搜索百度接口
  • 在Flutter中实现排行榜滑动阻尼效果
  • 大家都在用的HR招聘管理工具:国内Top5排名
  • 免费开源!语音识别平台让医疗对话更高效,沟通更准确
  • xtu oj 字母序列
  • 时间数据可视化基础实验(南丁格尔玫瑰图)——Python热狗大胃王比赛数据集
  • 网站建设中需要注意哪些安全问题?----雷池社区版
  • 达梦数据库基本操作指南:从表空间创建到触发器应用
  • K8S部署
  • 从设计到伴飞:数字孪生赋能航天航空新时代
  • 大模型日报|12 篇必读的大模型论文
  • 放电消纳负载是什么
  • 前端经典【面试题】持续更新HTML、CSS、JS、VUE、FLUTTER、性能优化等