Просьба помочь с вопросом по изображениям на сайте

12
Rosno
На сайте с 28.03.2011
Offline
85
1125

Всем добрый день!

Делаем сайт..

Программист говорит что при размещении изображения ( к примеру 850х370) которое будет отображаться в самой статье, невозможно сделать "нарезку" других размеров изображений ( к примеру.. для превью на главной, или вывода где-нибудь еще на сайте и тд и тп

Именно нарезку а не масштабирование))

Конкретно:

Есть статья ( в статье изображение 850х370)

Задача: из этого изображение ( на автомате) чтобы получались следующие изображения ( без искажения))

245х137

102х76

и тд. еще несколько размеров

нашел тут вот такое, подходит ли для моего случая или нет:

<?php

/*

$x_o и $y_o - координаты левого верхнего угла выходного изображения на исходном

$w_o и h_o - ширина и высота выходного изображения

*/

function crop($image, $x_o, $y_o, $w_o, $h_o) {

if (($x_o < 0) || ($y_o < 0) || ($w_o < 0) || ($h_o < 0)) {

echo "Некорректные входные параметры";

return false;

}

list($w_i, $h_i, $type) = getimagesize($image); // Получаем размеры и тип изображения (число)

$types = array("", "gif", "jpeg", "png"); // Массив с типами изображений

$ext = $types[$type]; // Зная "числовой" тип изображения, узнаём название типа

if ($ext) {

$func = 'imagecreatefrom'.$ext; // Получаем название функции, соответствующую типу, для создания изображения

$img_i = $func($image); // Создаём дескриптор для работы с исходным изображением

} else {

echo 'Некорректное изображение'; // Выводим ошибку, если формат изображения недопустимый

return false;

}

if ($x_o + $w_o > $w_i) $w_o = $w_i - $x_o; // Если ширина выходного изображения больше исходного (с учётом x_o), то уменьшаем её

if ($y_o + $h_o > $h_i) $h_o = $h_i - $y_o; // Если высота выходного изображения больше исходного (с учётом y_o), то уменьшаем её

$img_o = imagecreatetruecolor($w_o, $h_o); // Создаём дескриптор для выходного изображения

imagecopy($img_o, $img_i, 0, 0, $x_o, $y_o, $w_o, $h_o); // Переносим часть изображения из исходного в выходное

$func = 'image'.$ext; // Получаем функция для сохранения результата

return $func($img_o, $image); // Сохраняем изображение в тот же файл, что и исходное, возвращая результат этой операции

}

crop("image.jpg", 100, 100, 200, 50); // Вызываем функцию

?>

---------------------------------------------------------------------------

В любом случае буду очень благодарен за помощь или консультацию для моего программера ( консультацию готов оплатить) либо готов оплатить разумную сумму за практическое решение данного вопроса))) - программирование

Arsh
На сайте с 21.03.2007
Offline
199
#1
Rosno:
Именно нарезку а не масштабирование))

Сломал мозг :(

Где резать будем?

Rosno
На сайте с 28.03.2011
Offline
85
#2
Arsh:
Сломал мозг :(
Где резать будем?

Таки будем? Сие возможно?

Ваша цена за решение проблемы?

ДП
На сайте с 23.11.2009
Offline
203
#3

Покажите на примере любой картинки что вам нужно - тогда будет о чем поговорить.

Если вам надо вырезать кусок изображения более мелкого размера - то по какому принципу скрипт его должен выбирать?

CP
На сайте с 12.08.2009
Offline
101
#4

Судя по размерам, искажения в любом случае будут, края будут обрезать на более мелких размерах. Задавайте кратные размеры и всё будет просто реализуемо.

Профессиональный frontend: JS, html,css, Single-Page App (/ru/forum/964386)
Rosno
На сайте с 28.03.2011
Offline
85
#5
Дикий пионер:
Покажите на примере любой картинки что вам нужно - тогда будет о чем поговорить.
Если вам надо вырезать кусок изображения более мелкого размера - то по какому принципу скрипт его должен выбирать?

Я не программист, но если рассуждать логично есть загружаемое изображение на сервак ( 850х370)

скрипт режет его по принципу сохранения центральной части на следующие размеры

- 235х147

- 102х 76

и тд.. не суть))

Пользователь открывает главную сайта - ему в качестве превью показывается

название статьи +анонс+ превью изображения 235х147

пользователь нажал на заголовок статьи и попал на саму статью с текстом и изображением 850х370 и тд..

тут чего сложного то???? я не поверю что не может быть такого функционала и невозможно такое сделать)))))))))

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

Я еще раз хочу заметить, что я не программер, но чисто логично и умозрительно понимаю что такое можно реализовать)))

---------- Добавлено 19.12.2017 в 04:07 ----------

Content-pro:
Задавайте кратные размеры и всё будет просто реализуемо.

Мне не нужно кратные!!

Rosno
На сайте с 28.03.2011
Offline
85
#6

На первом скрине, требуемые размеры изображений ( макет так и делался))

На втором скрине - что получилось при программинге))) ( исходное изображение, оригинал 850х370 )

ПС смотрите не на картинки, а на размеры))))

jpg frrr.jpg
jpg djjd.jpg
Joker-jar
На сайте с 26.08.2010
Offline
154
#7

По всей видимости, вам нужно это http://www.imagemagick.org/Usage/crop/ выполняйте convert с нужными параметрами.

CP
На сайте с 12.08.2009
Offline
101
#8
Rosno:
Мне не нужно кратные!!

Ну а как вы уменьшите ширину на 2 а высоту на 2.5 без искажения и обрезания картинки?)

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

Jaf4
На сайте с 03.08.2009
Offline
804
#9

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

Именно при помощи имиджмэджик, на сколько я помню.

New! NVMe VPS от SmartApe.ru (https://goo.gl/eoYYkS)
iworkshop
На сайте с 22.12.2008
Offline
195
#10

Русаков - зло.

Код у него очень своеобразный, хоть и работает.

Под вашу задачу должен подойти этот класс:

https://true-coder.ru/php/toolkit-dlya-resajza-i-kropa-izobrazhenij-na-php.html

Класс работает, только что проверил.

Ресайзите изображение по бОльшему параметру, потом вырезаете в нужной пропорции.

Навскидку, что-то вроде этого:


$imgpath = 'image.jpg';

$img = AcImage::createImage($imgpath);
$img->resizeByWidth(350)
->crop(1,1,245,137)
->save(time() .'image245_137.jpg');
$img = AcImage::createImage($imgpath);
$img->resizeByWidth(150)
->crop(1,1,102,76)
->save(time() .'image102_76.jpg');
XMLRiver - прямая выдача Google и Яндекс через API
12

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