
我们平时要给图片加水印,但是又不会PS,免不了着急上火,还找不到人,想想还是得自己学一手~
而且图片很多的话,PS还是挺慢的,用Python一键生成即可,效率杠杠的。
准备工作
环境的话我这里使用的是 Python 和 pycharm
如果添加一张图片的水印,两行代码就实现了。
本次使用的模块是 filestools , 第三方模块,咱们需要手动安装一下。
win+r打开搜索框,输入cmd 按确定后d出命令提示符窗口,输入 pip install filestools 即可安装成功。
代码解析
1、单张图片添加水印
模块导入
怎么使用 filestools 模块呢?
首先导入模块里面的一个方法,watermarker ,点上 marker ,然后 import add_mark
add_mark 已经包含了很多方法
file 是添加水印照片 ,mark 使用哪些字作为水印,out 保存的地方 ,color 颜色,size 水印字体的大小,opacity 不透明度,space 字体间距,angle 旋转角度。
假设我要给图片添加上:人生苦短, 快学python
咱们把图片和文字加进去即可,代码如下:
2、批量填加多张图片水印
批量给图片添加的话,需要用到 OS 模块。
导入一下
用os模块读取文件夹所有内容 ,使用 files 接收。
打印一下
现在所有文件名字都有了
通过 for 循环遍历都打印出来
然后将文件添加进去,我们读取的是 img_1 里面的内容,那就把这个文件里的内容都传进去,保存数据的时候,都会保存在这里面。
再改一下透明度
我这里改成0.5
这样就清晰多了~
最近项目在做一个商城项目 项目上的图片要添加水印① 添加图片水印②:添加文字水印一下提供下个方法 希望大家可以用得着 复制代码 代码如下: package blogs imageimport java awt AlphaCompositeimport java awt Colorimport java awt Fontimport java awt Graphics Dimport java awt Imageimport java awt RenderingHintsimport java awt image BufferedImageimport java io Fileimport java io FileOutputStreamimport java io InputStreamimport java io OutputStreamimport javax imageio ImageIOimport javax swing ImageIcon/** * 图片水印 */ public class ImageUtil { /** * @param args */ public static void main(String[] args) { String srcImgPath = "e:/ png" String iconPath = "e:logo jpg" String targerPath = "e:/ jpg" // 给图片添加水印 ImageUtil waterMarkImageByIcon(iconPath srcImgPath targerPath f) // 给图片添加水印 水印旋转 // ImageMarkLogoByIcon markImageByIcon(iconPath srcImgPath // targerPath ) } /** * 给图片添加水印 可设置水印图片旋转角度 * * @param iconPath * 水印图片路径 * @param srcImgPath * 源图片路径 * @param targerPath * 目标图片路径 * @param degree * 水印图片旋转角度 * @param width * 宽度(与左相比) * @param height * 高度(与顶相比) * @param clarity * 透明度(小于 的数)越接近 越透明 */ public static void waterMarkImageByIcon(String iconPath String srcImgPath String targerPath Integer degree Integer width Integer height float clarity) { OutputStream os = null try { Image srcImg = ImageIO read(new File(srcImgPath)) System out println("width:" + srcImg getWidth(null)) System out println("height:" + srcImg getHeight(null)) BufferedImage buffImg = new BufferedImage(srcImg getWidth(null) srcImg getHeight(null) BufferedImage TYPE_INT_RGB) // 得到画笔对象 // Graphics g= buffImg getGraphics() Graphics D g = buffImg createGraphics() // 设置对线段的锯齿状边缘处理 g setRenderingHint(RenderingHints KEY_INTERPOLATION RenderingHints VALUE_INTERPOLATION_BILINEAR) g drawImage( srcImg getScaledInstance(srcImg getWidth(null) srcImg getHeight(null) Image SCALE_SMOOTH) null) if (null != degree) { // 设置水印旋转 g rotate(Math toRadians(degree) (double) buffImg getWidth() / (double) buffImg getHeight() / ) } // 水印图象的路径 水印一般为gif或者png的 这样可设置透明度 ImageIcon imgIcon = new ImageIcon(iconPath) // 得到Image对象 Image img = imgIcon getImage() float alpha = clarity// 透明度 g setComposite(AlphaComposite getInstance(AlphaComposite SRC_ATOP alpha)) // 表示水印图片的位置 g drawImage(img width height null) g setComposite(AlphaComposite getInstance(AlphaComposite SRC_OVER)) g dispose() os = new FileOutputStream(targerPath) // 生成图片 ImageIO write(buffImg "JPG" os) System out println("添加水印图片完成!") } catch (Exception e) { e printStackTrace() } finally { try { if (null != os) os close() } catch (Exception e) { e printStackTrace() } } } /** * 给图片添加水印 可设置水印图片旋转角度 * * @param logoText * 水印文字 * @param srcImgPath * 源图片路径 * @param targerPath * 目标图片路径 * @param degree * 水印图片旋转角度 * @param width * 宽度(与左相比) * @param height * 高度(与顶相比) * @param clarity * 透明度(小于 的数)越接近 越透明 */ public static void waterMarkByText(String logoText String srcImgPath String targerPath Integer degree Integer width Integer height Float clarity) { // 主图片的路径 InputStream is = null OutputStream os = null try { Image srcImg = ImageIO read(new File(srcImgPath)) BufferedImage buffImg = new BufferedImage(srcImg getWidth(null) srcImg getHeight(null) BufferedImage TYPE_INT_RGB) // 得到画笔对象 // Graphics g= buffImg getGraphics() Graphics D g = buffImg createGraphics() // 设置对线段的锯齿状边缘处理 g setRenderingHint(RenderingHints KEY_INTERPOLATION RenderingHints VALUE_INTERPOLATION_BILINEAR) g drawImage( srcImg getScaledInstance(srcImg getWidth(null) srcImg getHeight(null) Image SCALE_SMOOTH) null) if (null != degree) { // 设置水印旋转 g rotate(Math toRadians(degree) (double) buffImg getWidth() / (double) buffImg getHeight() / ) } // 设置颜色 g setColor(Color red) // 设置 Font g setFont(new Font("宋体" Font BOLD )) float alpha = clarity g setComposite(AlphaComposite getInstance(AlphaComposite SRC_ATOP alpha)) // 第一参数 >设置的内容 后面两个参数 >文字在图片上的坐标位置(x y) g drawString(logoText width height) g dispose() os = new FileOutputStream(targerPath) // 生成图片 ImageIO write(buffImg "JPG" os) System out println("添加水印文字完成!") } catch (Exception e) { e printStackTrace() } finally { try { if (null != is) is close() } catch (Exception e) { e printStackTrace() } try { if (null != os) os close() } catch (Exception e) { e printStackTrace() } } } }还有一个图片缩放代码:
复制代码 代码如下: lishixinzhi/Article/program/Java/JSP/201311/20206
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)