批量修改照片尺寸大小(适应冲洗的,比如6寸)【技术菜鸟】

背景

        前几天想要把自己感觉值得留恋的照片统一冲洗出来,但是上网看很多冲洗出来的照片因为本身尺寸不适应冲洗的尺寸要求,经常出现不一致的留白情况。(强迫症非常难受)但是本人过懒,又不想下载什么软件去批量修改,所以干脆考虑自己动手用python来实现。

        虽然可能比用现成软件要复杂,但是就当是对自己的一种磨练,毕竟提高动手能力与行动力也很重要!!💪(加上我快忘光了python的语法,菜鸟心痛::>_<::)

网上照片尺寸信息

 实验

步骤

        1. 将该python文件与需要处理的文件夹放置于同一级目录下

        2.运行一下代码

代码

代码1.0

        一开始把问题想复杂了,难受😫

from PIL import Image
import time
import os
import random

data_base_dir = r"./unSize" #存放原始图片地址

# 支持1寸、2寸、5寸、6寸,要是不够格式可以自己加
def chooseSize(num):
    if num == 1:
        return [25, 35]
    elif num == 2:
        return [35, 53]
    elif num == 5:
        return [89, 127]
    elif num == 6:
        return [102, 152]

for file in os.listdir(data_base_dir):
    im = Image.open(r"./unSize/" + file)#当前目录下的图片名字
    # 图片的宽度和高度
    img_size = im.size
    print("图片宽度和高度分别是{}".format(img_size))
    (Pic_x,Pic_y) = img_size

    # 先检测是 横图 还是 竖图
    if Pic_x >= Pic_y:  # 也就是横着的照片
        im = im.rotate(90, expand=1)  # expand=1,自动改变长宽尺寸,防止出现黑边
        (Pic_x, Pic_y) = im.size
        print("转方向之后宽高: " + str(Pic_x) + "," + str(Pic_y))

    # 初始裁剪方案
    x = 0
    y = 0
    w = Pic_x
    h = Pic_y

    # 以中心为准裁剪
    if Pic_x/Pic_y <= chooseSize(6)[0]/chooseSize(6)[1]:
        final_height = (chooseSize(6)[1]/chooseSize(6)[0]) * Pic_x
        adjust = (Pic_y-final_height)/2

        h = final_height
        y = adjust/2 # 从(x, y)开始截
    else :
        final_width = (chooseSize(6)[0]/chooseSize(6)[1]) * Pic_y
        adjust = (Pic_x-final_width)/2

        w = final_width
        x = adjust/2 # 从(x, y)开始截

    region = im.crop((x, y, x+w, y+h))
    region.save("./donePic/_" + str(random.randint(2,100)) + ".jpg")#保存的文件名字
    time.sleep(0.1)

代码2.0

        为了让代码内容更加简洁,也为了增强代码可复用性,我又做了一下修改

from PIL import Image
import time
import os
import random

data_base_dir = r"./unSize" #存放原始图片地址

"""函数chooseSize支持1寸、2寸、5寸、6寸,要是不够格式可以自己加 2.0 版本 只返回比值"""


def chooseSize(num):
    if num == 1:
        return 25/35
    elif num == 2:
        return 35/53
    elif num == 5:
        return 89/127
    elif num == 6:
        return 102/152


for file in os.listdir(data_base_dir):
    im = Image.open(r"./unSize/" + file)#当前目录下的图片名字
    # 图片的宽度和高度
    img_size = im.size
    print("图片宽度和高度分别是{}".format(img_size))
    (Pic_x,Pic_y) = img_size

    # 先检测是 横图 还是 竖图
    if Pic_x >= Pic_y:  # 也就是横着的照片
        im = im.rotate(90, expand=1)  # expand=1,自动改变长宽尺寸,防止出现黑边
        (Pic_x, Pic_y) = im.size
        print("转方向之后宽高: " + str(Pic_x) + "," + str(Pic_y))

    # 初始裁剪方案
    x = 0
    y = 0
    w = Pic_x
    h = Pic_y

    # 以中心为准裁剪
    if Pic_x/Pic_y <= chooseSize(6):
        final_height = (1/chooseSize(6)) * Pic_x
        adjust = (Pic_y-final_height)/2

        h = final_height
        y = adjust/2 # 从(x, y)开始截
    else :
        final_width = chooseSize(6) * Pic_y
        adjust = (Pic_x-final_width)/2

        w = final_width
        x = adjust/2 # 从(x, y)开始截

    region = im.crop((x, y, x+w, y+h))
    region.save("./donePic/_" + str(random.randint(2,100)) + ".jpg")#保存的文件名字
    time.sleep(0.1)

效果展示 

思考

        实际上2.0也很粗糙,可以将尺寸切割的代码再一次封装,但是这里就不再修改了。菜鸟一枚,文中若有对代码编写不到位的地方,欢迎指正!❀

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值