金牌导航网

戊辰人博客

2023-05-01 16:01:06

戊辰人博客

青,取之于蓝而青于蓝;冰,水为之而寒于水。

Python之利用PIL批量给图片添加文字

日期:2017年4月11日 作者: 分类:编程 阅读:58

因为略懂Photoshop,所以接到一个任务:将公司所有的产品图片整理出来,并在图片中写明产品的品牌和型号,然后分类放在iPad中方便给客户展示。

WTF,几千张图片,用PS一个个打开添加文字,这会把人弄疯的,作为一个懒人,做这种大量机械性的重复工作显然不是我的追求,于是就想到用程序自动实现。

一、使用Python和PIL图片处理库

思路:所有图片的文件名都是以品牌+型号的方式命名,所以先用python读取当前目录下所有文件,得到文件名后我们就可以得到当前图片的品牌型号字符串,然后根据图片像素大小自动判断合适的字体大小,再利用PIL库给原图片加上文字水印(品牌型号),然后将处理后的图片保存在当前目录下的new子文件夹。

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

import os
import sys

import PIL
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont

# 设置文字水印
def set_water_text(imagefile, text):

    img = Image.open(imagefile)
    (img_x, img_y) = img.size
    
    # 文字字体像素高度为图片高度的 1/20
    ttfont = ImageFont.truetype('/usr/share/fonts/noto/NotoSansCJK-Regular.ttc', int(img_y/20))

    draw = ImageDraw.Draw(img)
    draw.text((int(img_x/20), img_y - int((img_y*1.3)/20)), text, (0,0,0), font=ttfont)

    newdir = "new"
    if not os.path.exists(newdir):
        os.mkdir(newdir)

    img.save(newdir + '#' + text + '.jpg', 'jpeg')

if __name__ == '__main__':
    files = os.listdir(os.getcwd())
    for filename in files:
        if 'jpg' == filename.split('.')[-1].lower() or 'png' == filename.split('.')[-1].lower():
            set_water_text(filename, filename.split('.')[0])
            print(filename)

阅读全文…

Linux中su与sudo、su – root的区别

日期:2017年1月11日 作者: 分类:运维 阅读:428

一、su 和 sudo 的区别

共同点:都是root用户的权限;

不同点:su仅仅取得root权限,工作环境不变,还是在切换之前用户的工作环境;sudo是完全取得root的权限和root的工作环境。

二、su – root 和 su root(su)的区别

su – root:表示人以root身份登录

just like login as root, then the shell is login shell,which mean it will expericene a login process,usually .bash_profile and .bashrc will be sourced

su root:表示与root建立一个链接,通过root执行命令

like you open an interactive shell in root name,then only .bashrc will be sourced.

阅读全文…

windows下安装64位mysql 5.7

日期:2016年11月4日 作者: 分类:数据库 阅读:605

操作系统:windows 7 64bit

数据库:mysql-5.7.16-winx64

数据库软件包:mysql-5.7.16-winx64.zip

一、准备相关文件

1. 解压mysql-5.7.16-winx64.zip,我这里直接解压到D盘,解压后得到mysql-5.7.16-winx64目录

2. 为了方便,我将mysql-5.7.16-winx64改名为mysql57,这样,我的mysql数据库的路径就为 D:\mysql57

3. 进入 D:\mysql57目录,将 my-default.ini 改名为my.ini

4. 用文本编辑器打开 my.ini 文件,修改相关配置

[mysqld]
# 数据库的根目录
basedir = D:\\mysql57
# 数据存放目录
datadir = D:\\mysql57\\data
# 端口
port = 3306
# server_id = .....
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

阅读全文…

《雨荷花台》大明湖湖畔

日期:2016年10月16日 作者: 分类:随笔 阅读:162

冬寒一日春风去,纳晗难得初绽开,遥看楼台细柳垂,大明湖畔寻雨荷。雨荷不现存心底,饶曼垂柳西风里。婚媾之物长伴行,烟花柳巷独无穷。雨荷不嫌畅彻底,长干直驱云霄顶。国之栋梁危栖息,自命清高万民疏。

泉城昨日那番苦寒如同案子上这碟曼巴咖啡,混沌中有那么一丝涩口。幸得今日泉城蓝幔遮天,悍日当空,照的人春心那个荡漾啊!简直无言而寓。早早洗漱完毕后就直奔大明湖,我觉得硬是要揣摩一处景色,那么必当得挑个尚好的天气,这才叫天时地利人和。也不枉超然楼那般超然矗天立地,访客必然也超然心舒。自多日的闷幔后整个泉城毫无征兆的放晴,多许身晦垢污之人也踱步湖边让春风暖日化解那污浊之躯,这算是明世之人。另类之人长驱暗黑之地,也并非神志所控。

阅读全文…

养寇自重

日期:2016年10月16日 作者: 分类:随笔 阅读:170

早上收到一则手机报消息,其中有一段以“中国人流手术者近半数未成年人”为标题的短讯比较有趣,随详细引索下去。原文如下:“19日,中国社科院教授陈一筠发表调查报告称,目前中国未成年少女人流的低龄化趋势愈演愈烈,未成年手术患者比例达到40%至50%。据调查,在广西南宁发现有9岁少女堕胎的案例,而表示对此负责的是一个13岁的男孩。”

阅读全文…

Docker实战(六)搭建自己的Docker Registry

日期:2016年5月4日 作者: 分类:运维 阅读:2,007

Docker Registry 是一个用来管理Docker镜像的服务,本身也是一个Docker容器。大部分情况下都可以使用Docker Hub,私有的Docker Registry使用场景主要在当需要对容器镜像存储进行完全控制或需要把镜像管理进行集成的情况。

一、Docker Registry 部署

由于 Docker Registry 已经被制作成一个Docker镜像,所以安装部署非常简单,只需要按照我们通常的docker run就可以,如果本地没有 registry 的镜像,则会自动从 Docker Hub 上获取。

需要注意的是 Registry 默认的对外服务端口是 5000,如果我们宿主机上运行的 Registry 需要对外提供服务,可以通过映射端口的方式提供。

本节实验中我们使用 registry:2 镜像,这个镜像为2.0版本的Registry。

部署 Docker Registry的命令:

docker run -d -p 5000:5000 --restart=always --name registry registry:2

停止和删除 Registry 只需要用容器管理中学到的 docker stopdocker rm命令。

阅读全文…

Docker实战(五)编写Dockerfile

日期:2016年5月3日 作者: 分类:运维 阅读:975

目标:编写Dockerfile搭建LAMP环境,并能通过ssh连接到容器。

一、创建Dockerfile文件

首先,需要创建一个目录来存放 Dockerfile 文件,目录名称可以任意,在目录里创建Dockerfile文件:

二、Dockerfile 基本框架

Dockerfile一般包含下面几个部分:

  1. 基础镜像:以哪个镜像作为基础进行制作,用法是FROM 基础镜像名称
  2. 维护者信息:需要写下该Dockerfile编写人的姓名或邮箱,用法是MANITAINER 名字/邮箱
  3. 镜像操作命令:对基础镜像要进行的改造命令,比如安装新的软件,进行哪些特殊配置等,常见的是RUN 命令
  4. 容器启动命令:当基于该镜像的容器启动时需要执行哪些命令,常见的是CMD 命令ENTRYPOINT

在本节实验中,我们依次先把这四项信息填入文档。Dockerfile中的#标志后面为注释,可以不用写。

打开Dockerfile,依次输入下面的基本框架内容:

阅读全文…

Docker实战(四)网络管理

日期:2016年4月29日 作者: 分类:运维 阅读:578

一、Docker网络基本配置

1)默认配置

Docker服务启动时会自动创建一个 docker0 的虚拟网桥,后续新创建的容器都会有个虚拟接口连接到这个网桥:

Docker网桥会设置为NAT模式,自动分配一个网段,本机环境中docker0的地址是172.17.0.1,每个容器都会自动分配的到一个IP地址。

可以通过docker inspect redis查看名为redis容器的网络配置信息。

我们可以为 Docker 服务指定不同的网桥以及网段,这些配置都可以写在 /etc/default/docker 文件中,作为服务启动的参数。

2)配置文件 /etc/default/docker

该文件为LMDE2 操作系统中 Docker 服务启动时使用的配置文件,不同的操作系统位置会有不同。这个文件本身是个 Shell 脚本。

首先查看文件内容:

阅读全文…

Docker实战(三)镜像管理

日期:2016年4月28日 作者: 分类:运维 阅读:1,005

简单的说镜像就是一个容器的只读模板,用来创建容器。当运行容器时需要指定镜像,如果本地没有该镜像,则会从Docker Registry下载。默认查找的是Docker Hub。Docker的镜像是增量的修改,每次创建新的镜像都会在老的镜像上面构建一个增量的层,使用到的技术是Another Union File System(AUFS)。

一、使用 Docker Hub

镜像存储中的核心概念仓库(Repository)是镜像存储的位置。Docker 注册服务器(Registry)是仓库存储的位置。每个仓库包含不同的镜像。

比如一个镜像名称 ubuntu:14.04,冒号前面的ubuntu是仓库名,后面的14.04是TAG,不同的TAG可以对应相同的镜像,TAG通常设置为镜像的版本号。

Docker Hub 是Docker官方提供公共仓库,提供大量的常用镜像,由于众所周之的原因经常连接Docker Hub会比较慢,所以我们也可以选择一些国内提供类似Docker Hub镜像服务站点。连接Docker Hub的常用命令包括:

# 搜索镜像
docker search ...

# 下载镜像
docker pull ...

阅读全文…

Docker实战(二)数据卷管理

日期:2016年4月27日 作者: 分类:运维 阅读:1,016

Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷(Data Volume)。数据卷可以用来存储Docker应用的数据,也可以用来在Docker容器间进行数据共享。

数据卷呈现给Docker容器的形式就是一个目录,支持多个容器间共享,修改也不会影响镜像。使用Docker的数据卷,类似在系统中使用 mount 挂载一个文件系统。

一、数据卷创建

容器管理实验中我们学习的命令 docker run 用来创建容器,可以在使用改命令时添加 -v 参数,就可以创建并挂载一个到多个数据卷到当前运行的容器中,-v的作用是将宿主机的一个目录作为容器的数据卷挂载到容器中,使宿主机和容器之间可以共享一个目录,如果本地路径不存在,Docker也会自动创建。

# 创建两个目录
mkdir /tmp/data1 /tmp/data2 

# 分别将两个目录挂载到新创建的容器上
docker run -t -i --name docker2 -v /tmp/data1:/data1 -v /tmp/data2:/data2 ubuntu /bin/bash

上述命令中 -v 参数可以使用多次,并挂在多个数据卷到容器中。后面的参数信息中冒号前面是宿主机的本地目录,冒号后面是容器中的挂载目录。

阅读全文…

友情链接

Copyright © 2023 All Rights Reserved 版权所有 金牌导航网