Перейти к содержимому

Сервис обмена электронных валют

Партнерская программа Kredov

Правильное создание миниатюры

#1 kolesgan

kolesgan
  • Пользователь
  • 73 сообщений
  • Репутация: 0
0

Отправлено 29 Май 2011 - 23:03

На сайте есть некая фотогаллерея. Выводятся они в ряд по 5 фоток. Размеры у разных фоток различны. Подгоняю по выстое в 100px. Возможно ли сделать так как здесь http://www.renaissan......11 Ballon4ik
Миниатюры в независимости от размеров изображения выводятся квадратиком в 100 px на 100. То есть излишние пикселы обрезаются для вывода миниатюр,

 

 

  • 0

#2 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 30 Май 2011 - 11:25

На указанном сайте миниатюры имеют размер 100*100. Эти размеры и указаны при выводе картинок:
<img src="" width="100" height="100" alt="" />

В принципе, это можно посмотреть в исходном коде и свойствах миниатюр.
  • 0


#3 almatar

almatar
  • Пользователь
  • 203 сообщений
  • Репутация: 0

Отправлено 30 Май 2011 - 12:37

Я думаю здесь всё дело в прокладке.
  • 0

#4 kolesgan

kolesgan
    Topic Starter
  • Пользователь
  • 73 сообщений
  • Репутация: 0

Отправлено 30 Май 2011 - 14:00

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


  • 0

#5 admin

admin
  • Пользователь PRO
  • 5 272 сообщений
  • Репутация: 54

Отправлено 30 Май 2011 - 15:19

kolesgan, так это же очень легко делается на php, используя библиотеку GD. Я бы с радостью вам помог, но нет времени разбираться. покопайтесь сами в GD, там всё понятно. Если что, прочитайте главу "Работа с изображениями" (примерно так называется) в книге "PHP5 в подлиннике".
  • 0

Сколько лет прошло, а ссылки всё ещё лучше покупать тут



#6 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 30 Май 2011 - 15:22

kolesgan, Логично. Я просто сказал, что на указанном сайте ничего не подгоняется - там миниатюры имеют размер 100*100


  • 0


#7 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 30 Май 2011 - 19:13

kolesgan, чтобы сделать нормальную миниатюру, которая будет содержать информацию, а не огрызок, правильнее было бы формировать её самому. При загрузке картинки тебе дается возможность создать миниатюру, квадрат 100x100 минимум, его можно растягивать пропорционально и перемещать по картинке (реализуется на JS), далее при выборе куска картинки скрипт вырезает его и сжимает до 100x100, затем сохраняет на сервере.

А если считать, что важная информация находится в центре картинки, то можно сделать примерно так:
1) Определяем размер меньшей стороны, прикладываем к нему множитель 0.8, округляем получившееся число до целых пикселей.
2) Такой величины имеем квадрат, осталось его отцентрировать, то есть нужно будет определиться с размерами отступа для обрезки в GD. Нарисуйте себе на бумажке и все станет понятно, там задается обычно два отступа от верхнего левого угла и размеры копии (функция imagecopy).
3) Далее нужно получившуюся большую заготовку сжать до 100x100 пикселей функцией

Для последнего случая примерно такой код получается, сразу скажу, что вариант рассчитан -> важная информация расположена крупным планом в центре изображения. Например, файл называется image.php:
<?php

$sourceimg = "catalog/image.jpg"; // путь до картинки с её именем и расширением
$size_mini = 200; // размер миниатюры (сторона квадрата)
$factorcutoff = 1; // коэффициент среза от минимального размера (описан в алгоритме)

list($width, $height) = getimagesize($sourceimg);
$src = imagecreatefromjpeg($sourceimg);
$dst = imagecreatetruecolor($size_mini, $size_mini);

$size_square = ceil(($width > $height) ? $height * $factorcutoff : $width * $factorcutoff);
$indentX = ceil(($width - $size_square) / 2);
$indentY = ceil(($height - $size_square) / 2);

imagecopyresized($dst, $src, 0, 0, $indentX, $indentY, $size_mini, $size_mini, $size_square, $size_square);

imagejpeg($dst);
imagedestroy($src);
imagedestroy($dst);
?>

!ВАЖНО: пример выше нормально работает только с jpg-изображениями.

Выводим картинку, index.php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<img src="image.php" />
</body>
</html>

  • 0

#8 kolesgan

kolesgan
    Topic Starter
  • Пользователь
  • 73 сообщений
  • Репутация: 0

Отправлено 31 Май 2011 - 15:50

Спасибо! то что надо!!!
  • 0

#9 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 31 Май 2011 - 21:30

kolesgan, пожалуйста, всегда рад помочь. Старайтесь в голове прокручивать примерную реализацию, хорошо помогает. Затем пишем алгоритм словестный, затем можно набросать структуру и радуемся :(
Тема закрыта.
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru