Как уменьшить картинки пакетно

12
staf888
На сайте с 07.10.2008
Offline
178
2307

Подскажите такую вещь. Есть 1000 картинок. Все разных размеров. Есть 2 задачи. Первая - уменьшить все картинки до определенной ширины(высота соответственно должна уменьшиться пропорционально).

Вторая задача - сделать все картинки квадратными. То есть у уменьшенных по ширине фотографий по высоте поставить белый фон до того же размера, что ширина.

Пример была картинка 1000 на 500.

Программа должна ее сделать 500 на 250. А потом 500 на 500, добавив высоте 125 белого фона снизу и 250 сверху.

Возможно ли такое сделать в пакетном режиме? Если можно, то чем?

ищу специалистов по скрытой рекламе на форумах и других сообществах.
temniy
На сайте с 15.03.2008
Offline
263
#1

насчет этого сомневаюсь

Программа должна ее сделать 500 на 250. А потом 500 на 500, добавив высоте 125 белого фона снизу и 250 сверху.

а в остальном irfanview.com вам поможет

⭐ Лучший хостинг от 4 евро, VPS от 6 евро - разные локации - любые карты - скидки до 20% - https://fornex.com/c/ffi2e3/ru/services/
P
На сайте с 28.04.2011
Offline
1
#2

Actions фотошопа с этим отлично справляются

staf888
На сайте с 07.10.2008
Offline
178
#3

спасибо, буду пробовать

_vb_
На сайте с 25.07.2009
Offline
104
#4
staf888:
Подскажите такую вещь. Есть 1000 картинок. Все разных размеров. Есть 2 задачи. Первая - уменьшить все картинки до определенной ширины(высота соответственно должна уменьшиться пропорционально).

Вот вам скрипт, сохраните его в файл script.py, положите в папку со своими картинками, поставьте в new_width нужную ширину в пикселях.

Запускать 'python script.py'. После работы будет создана подпапка out, где будут лежать ваши отмасштабированные картинки с расширениями 'jpg', 'gif', 'png'.

Чтобы скрипт запустился, нужно поставить сначала вот это, а потом вот это.

import os

from PIL import Image

new_width = 100
out = 'out' # folder for scaled images

if not os.path.isdir(out):
os.mkdir(out)

for itm in os.listdir('./'):
ext = itm.split('.')[-1]
if os.path.isfile(itm) and ext in ['jpg', 'gif', 'png']:
img = Image.open(itm)
width, height = img.size
new_height = height * new_width / width
if img.mode != "RGB":
img = img.convert("RGB")
img = img.resize((new_width, new_height), Image.ANTIALIAS)
img.save(os.path.join(out, itm))
staf888:

Вторая задача - сделать все картинки квадратными. То есть у уменьшенных по ширине фотографий по высоте поставить белый фон до того же размера, что ширина.

Это лень, идти надо :)

Саратовская фракция серча (). Давайте посчитаемся.
T
На сайте с 13.04.2008
Offline
67
t3s
#5

задача стоит именно в таком порядке, ребром - сначала уменьшить размер а потом сделать квадратными, добавив белый вместо пустоты?

вариант когда делаем картинки квадратными, просто обрезав лишнее не подойдет?

если подойдет и немного дружите с PHP, ловите (пример не мой но рабочий, требуется библиотека GD):


<?php

define('SOURCE', 'original.jpg'); // исходный файл
define('TARGET', 'myimage.jpg'); // имя результата
define('NEWX', 500); // требуемая ширина
define('NEWY', 500); // требуемая высота

// Определяем размер изображения с помощью функции getimagesize:
$size = getimagesize(SOURCE);
// Функция getimagesize, требуя в качестве своего параметра имя файла,
// возвращает массив, содержащий (помимо прочего, о чем можно прочитать
// в документации), ширину - $size[0] - и высоту - $size[1] -
// указанного изображения. Кстати, для ее использования не требуется наличие
// библиотеки GD, так как она работает непосредственно с заголовками
// графических файлов. В случае, если формат файла не распознан, getimagesize
// возвращает false:
if ($size === false) die ('Bad image file!');

// Читаем в память JPEG-файл с помощью функции imagecreatefromjpeg:
$source = imagecreatefromjpeg(SOURCE)
or die('Cannot load original JPEG');

// Создаем новое изображение
$target = imagecreatetruecolor(NEWX, NEWY);

// Копируем существующее изображение в новое с изменением размера:
imagecopyresampled(
$target, // Идентификатор нового изображения
$source, // Идентификатор исходного изображения
0,0, // Координаты (x,y) верхнего левого угла
// в новом изображении
0,0, // Координаты (x,y) верхнего левого угла копируемого
// блока существующего изображения
NEWX, // Новая ширина копируемого блока
NEWY, // Новая высота копируемого блока
$size[0], // Ширина исходного копируемого блока
$size[1] // Высота исходного копируемого блока
);

// Сохраняем результат в JPEG-файле:
// Функции генерации графических файлов, такие как imagejpeg,
// могут выводить результат своей работы не только в броузер,
// но и в файл. Для этого следует указать имя файла в необязательном
// втором параметре.
// Именно функция imagejpeg имеет и третий необязательный параметр -
// качество изображения. хз почему, привычная цифра - 80.
imagejpeg($target, TARGET, 80);

// Как всегда, не забываем:
imagedestroy($target);
imagedestroy($source);
?>

просто запустите в цикле, указав в качестве входных файлов все те что находятся в нужной вам папке, а в качестве исходных - myimage1, myimage2 и т.д.

если есть лишнее время (и если имена картинок как-то влияют на ранжирование) то вместо myimage можна дергать из базы название поста и соответственно сохранять картинку как imya_novosti.jpg

webamator (http://webamator.ru) приглашает потестить сервис бесплатной оптимизации CSS и JavaScript (http://service.webamator.ru/) Занимаюсь проектами любой сложности. Качественно. Дорого. Примеры некоторых работ (http://blog.webamator.ru/category/portfolio)
DiAksID
На сайте с 02.08.2008
Offline
236
#6

всё несложно - библиотеки есть специальные именно под эти задачи. phpThumbs наверное самая популярная...

show must go on !!!...
staf888
На сайте с 07.10.2008
Offline
178
#7

Всем большое спасибо за помощь

ДП
На сайте с 23.11.2009
Offline
203
#8
staf888:

Программа должна ее сделать 500 на 250. А потом 500 на 500, добавив высоте 125 белого фона снизу и 250 сверху.

Это скорее всего умеет делать imagemagick

rammlied
На сайте с 13.04.2011
Offline
56
#9

ACDSee тоже вроде с этим справляется

делаю СДЛы, получаются ГСы )
B
На сайте с 23.01.2009
Offline
37
#10

Про квадраты не скажу, а пакетное изменение размера прапорционально делает стандарный Office picture manager

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий