método um:
No Pillow, o método resize() forçará a imagem a ser dimensionada para o tamanho especificado, o que pode causar deformação ou distorção da imagem; enquanto o método thumbnail() irá reduzir a imagem, mantendo a proporção original sem deformação ou distorção.
Especificamente, o método thumbnail() calculará uma proporção de escala apropriada com base na largura e altura máximas especificadas e, em seguida, reduzirá a imagem de acordo com essa proporção, para que a largura e a altura da imagem final não excedam o tamanho especificado. O método resize() redimensiona diretamente a imagem para o tamanho especificado. Se o tamanho especificado for diferente da proporção da imagem original, ela será deformada ou distorcida.
Portanto, se você quiser manter a proporção original da imagem e reduzi-la, é recomendado usar o método thumbnail(); se você precisar forçar a escala da imagem para um tamanho especificado, você pode usar o redimensionamento (), mas esteja ciente de que ele pode causar distorção ou deformação.
from PIL import Image
import os
dir = r'C:\Users\1\Desktop\ffmpeg\bin\final_results'
out = r'C:\Users\1\Desktop\ffmpeg\bin\results'
def resize_image():
for path in os.listdir(dir):
img = os.path.join(dir, path)
print(f'缩放图:【{img}】')
with Image.open(img) as img:
img.thumbnail((1280, 720))
img.save(os.path.join(out, path))
# 调用示例
resize_image()
Método dois
import cv2
def resize_image(input_path, output_path, size):
img = cv2.imread(input_path)
height, width, _ = img.shape
if width > height:
scale = size / width
else:
scale = size / height
img = cv2.resize(img, (int(width * scale), int(height * scale)))
cv2.imwrite(output_path, img)
# 调用示例
input_path = 'input.jpg'
output_path = 'output.jpg'
size = 640 # 宽度或高度为 640
resize_image(input_path, output_path, size)
Neste código de exemplo, a função resize_image recebe três parâmetros: caminho do arquivo de entrada input_path, caminho do arquivo de saída output_path e tamanho do tamanho de destino. Dentro da função, primeiro use a função cv2.imread para ler o arquivo de entrada e use a propriedade shape para obter a largura e a altura da imagem. Em seguida, calcule a taxa de zoom de acordo com a relação de tamanho entre a largura e a altura. Finalmente, use a função cv2.resize para dimensionar a imagem para o tamanho especificado e use a função cv2.imwrite para salvar a imagem dimensionada no arquivo de saída.
Deve-se observar que o uso da biblioteca OpenCV pode exigir a instalação primeiro de dependências relacionadas, e o método de instalação específico pode ser encontrado em documentos relevantes. Além disso, ao usar a biblioteca OpenCV para dimensionar imagens, deve-se tomar cuidado para manter a proporção e evitar distorções ou distorções. Especificamente, de acordo com a relação de aspecto da imagem, a relação de escala pode ser calculada e a imagem pode ser reduzida para um tamanho apropriado.
método três
from PIL import Image
def resize_image(input_path, output_path, max_size):
img = Image.open(input_path)
width, height = img.size
if max(width, height) > max_size:
if width > height:
new_width = max_size
new_height = int(height * (max_size / width))
else:
new_width = int(width * (max_size / height))
new_height = max_size
img = img.resize((new_width, new_height))
img.save(output_path)
# 调用示例
input_path = 'input.jpg'
output_path = 'output.jpg'
max_size = 640 # 最大边长为 640
resize_image(input_path, output_path, max_size)
Neste código de exemplo, a função resize_image recebe três parâmetros: o caminho do arquivo de entrada input_path, o caminho do arquivo de saída output_path e o comprimento lateral máximo max_size. Dentro da função, primeiro use a função Image.open para ler o arquivo de entrada e use a propriedade size para obter a largura e a altura da imagem. Em seguida, calcule a taxa de zoom com base na relação entre o comprimento lateral máximo e o tamanho da imagem. Finalmente, use a função de redimensionamento para dimensionar a imagem para o tamanho especificado e use a função salvar para salvar a imagem dimensionada no arquivo de saída.
Deve-se observar que ao utilizar o método de redimensionamento da biblioteca Pillow, você também deve prestar atenção em manter a proporção da imagem para evitar deformação ou distorção. Especificamente, de acordo com a relação de aspecto da imagem, a relação de escala pode ser calculada e a imagem pode ser reduzida para um tamanho apropriado.
Método 3 (FFmpeg)
O formato do comando para dimensionar o tamanho do vídeo usando ffmpeg é o seguinte:
ffmpeg -i input.mp4 -vf scale=: output.mp4
Entre eles, 和
representam respectivamente a largura e a altura do vídeo ampliado, que pode ser especificado como um valor de pixel específico ou uma porcentagem, como 50%
.
input.mp4
Por exemplo, para dimensionar um arquivo de vídeo de entrada para um arquivo de vídeo de saída com largura de 640 pixels e altura de 360 pixels output.mp4
, o seguinte comando pode ser usado:
ffmpeg -i input.mp4 -vf scale=640:360 output.mp4
Se quiser dimensionar automaticamente de acordo com a proporção do vídeo original, você pode especificar apenas a largura ou a altura e manter a proporção do vídeo original:
# 指定宽度为 640 像素,高度按原始比例缩放
ffmpeg -i input.mp4 -vf scale=640:-1 output.mp4
# 指定高度为 360 像素,宽度按原始比例缩放
ffmpeg -i input.mp4 -vf scale=-1:360 output.mp4
Você também pode permitir que o ffmpeg preserve a proporção do vídeo original durante o dimensionamento para evitar distorção, scale
adicionando opções antes do parâmetro :force_original_aspect_ratio
ffmpeg -i input.mp4 -vf "scale=640:360:force_original_aspect_ratio=decrease,pad=640:360:(ow-iw)/2:(oh-ih)/2" output.mp4
Neste exemplo, pad
o filtro é usado para preencher o vídeo dimensionado para um tamanho de 640x360 pixels enquanto o centraliza.