13  图片编辑

13.1 裁剪

13.1.1 PIL

from PIL import Image

inputImg = 'data/nejm-mechanisms of fluid and solute transport during KRT.jpeg'
outImg1 = 'data/nejm-mechanisms of fluid and solute transport during KRT_crop1.jpeg'
outImg2 = 'data/nejm-mechanisms of fluid and solute transport during KRT_crop2.jpeg'

# 打开图像文件
image = Image.open(inputImg)

# 获取图像宽度
width = image.width
height = image.height

# 定义裁剪区域 (left, upper, right, lower)
cropped1 = image.crop((0, 0, width, height * 0.472))

cropped2 = image.crop((0, height * 0.472, width, height))

# 保存裁剪后的图像
cropped1.save(outImg1)
cropped2.save(outImg2)

13.1.2 CV2

import cv2

inputImg = 'data/lancet-rrt-con-int-figure3.png'
outImg = 'data/lancet-rrt-con-int-figure3_crop3.jpeg'

# 读取图像
img = cv2.imread(inputImg)

# 获取图像高度和宽度
height, width, channels = img.shape

# 定义裁剪区域的坐标和尺寸
x, y, w, h = 0, 0, width, int(height * 0.86)

# 进行裁剪
cropped = img[y:y+h, x:x+w]

# 保存裁剪后的图像
cv2.imwrite(outImg, cropped)

13.1.3 打包成终端执行

crop.py文件内容如下:

import argparse
from PIL import Image

def crop_image(input_img, output_img, crop_area):
    # 打开图像文件
    image = Image.open(input_img)
    
    # 获取图像宽度和高度
    width, height = image.size

    print(f"图片宽{width},高{height}")

    # 计算裁剪区域的实际坐标
    left = int(width * crop_area[0])
    upper = int(height * crop_area[1])
    right = int(width * crop_area[2])
    lower = int(height * crop_area[3])

    # 定义裁剪区域
    cropped = image.crop((left, upper, right, lower))

    # 保存裁剪后的图像
    cropped.save(output_img)

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("input_img", help="输入图像文件路径")
    parser.add_argument("output_img", help="输出图像文件路径")
    parser.add_argument("--left", type=float, help="裁剪区域左边界(占宽度的比例)")
    parser.add_argument("--upper", type=float, help="裁剪区域上边界(占高度的比例)")
    parser.add_argument("--right", type=float, help="裁剪区域右边界(占宽度的比例)")
    parser.add_argument("--lower", type=float, help="裁剪区域下边界(占高度的比例)")
    args = parser.parse_args()

    crop_area = (args.left, args.upper, args.right, args.lower)
    crop_image(args.input_img, args.output_img, crop_area)

在终端执行以下代码裁剪图片:

python crop.py data/image.png data/crop2.png --left 0 --upper 0.5 --right 1  --lower 1

通过以下代码查看使用帮助 :

python crop.py -h

13.2 下载图片

download.py文件内容如下:

import argparse
import requests

def download_image(url, save_path):
    response = requests.get(url)
    if response.status_code == 200:
        with open(save_path, 'wb') as file:
            file.write(response.content)
        print("图片下载成功!")
    else:
        print("图片下载失败!")

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("url", help="图片的URL地址")
    parser.add_argument("save_path", help="图片保存的路径和文件名")
    args = parser.parse_args()

    download_image(args.url, args.save_path)

通过以下代码下载图片

python download.py https://www.tmwr.org/figures/software-descr-examples-1.png data/image.png