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

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


Как обрезать картинку? Нужно уменьшить

#1 surfer

surfer
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71
0

Отправлено 12 Февраль 2010 - 10:58

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

 

 

  • 0

#2 ilyazh

ilyazh
  • Пользователь
  • 356 сообщений
  • Репутация: 1

Отправлено 12 Февраль 2010 - 13:43

можно в том же фотошопе. Не самый лучший вариант, если вам надо только обрезат фото, но если он у вас уже установлен, то, имхо, там проще всего. Ну по крайней мере мне.
  • 0

#3 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 12 Февраль 2010 - 14:00

вопрос в теме php поэтому подразумевается, что средставми php, используя gd библиотеку при загрузки на сервер ;)
  • 0

#4 ZiTosS

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

Отправлено 12 Февраль 2010 - 23:34

sc2r2bey, напишу алгоритм:
1) В функцию поступают - путь до картинки, размер квадратной картинки
2) Определяем, какая из сторон меньше ширина или высота:
2.1) Если ширина, определяем высоту уменьшенной картинки (высчитываем) масштабируем изображение, относительно ширины ( в PHP функция imagecopyresized() )
2.2) Если высота, определяем ширину уменьшенной картинки (высчитываем), масштабируем изображение, относительно высоты ( в PHP функция imagecopyresized() )
3) Создаём новый ресурс изображения и копируем часть отмасштабированной картинки, надо вырезать квадрат размером "размер квадратной картинки" ( в PHP функция imagecopy() )
4) Выводим изображение или сохраняем в файл
  • 0

#5 euorik

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

Отправлено 17 Февраль 2010 - 23:42

Здравствуйте! А в php коде можно. Меня интересует пример. Возможно ли это?


  • 0

#6 ilyazh

ilyazh
  • Пользователь
  • 356 сообщений
  • Репутация: 1

Отправлено 18 Февраль 2010 - 07:43

в php коде это возможно, но к сожалению у меня сейчас нет такого кода под рукой. Вечером, если вам не помогут, то поищу код и выложу тут.
  • 0

#7 ZiTosS

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

Отправлено 18 Февраль 2010 - 19:58

euorik, тогда держите сырую реализацию, времени нет дорабатывать.
файл с функциями для получения квадратной картинки functions.php
<?php

function printSquareImage($pathImg, $sizeSquare = 80)
{
if( file_exists($pathImg) && ($sizeImg = @getimagesize($pathImg) ) !== NULL )
{
$mimeType = getMimeType($pathImg);

$srcW = $sizeImg[0];
$srcH = $sizeImg[1];

if( $mimeType == "image/jpeg" ){
$image = imagecreatefromJPEG($pathImg);
}elseif( $mimeType == "image/gif" ){
$image = imagecreatefromGIF($pathImg);
}elseif( $mimeType == "image/png" ){
$image = imagecreatefromPNG($pathImg);
}else{
die("Couldn't create image.");
}

if( $srcW > $sizeSquare && $srcH > $sizeSquare )
{
$reduction = calculateReduction($srcW,$srcH, $sizeSquare);
$desW = round($srcW/$reduction);
$desH = round($srcH/$reduction);

if( $mimeType == "image/gif" ){
$copy = imagecreate($desW, $desH);
}else{
$copy = imagecreatetruecolor($desW, $desH);
}

imagecopyresampled($copy,$image,0,0,0,0,$desW, $desH, $srcW, $srcH) or die ("Image copy failed.");
$image = $copy;

$srcW = $desW;
$srcH = $desH;
}

if( $mimeType == "image/gif" ){
$square = imagecreate($sizeSquare, $sizeSquare);
}else{
$square = imagecreatetruecolor($sizeSquare, $sizeSquare);
}

imagecopy($square,$image,0,0,0,0,$srcW,$srcH);
imagedestroy($image);

header("Content-type: {$mimeType}");
if( $mimeType == "image/jpeg" ){
imagejpeg($square,"", 100);
}elseif( $mimeType == "image/gif" ){
imagegif($square);
}elseif( $mimeType == "image/png" ){
imagepng($square);
}else{
die("Couldn't create image.");
}
}
}

function calculateReduction($srcW, $srcH, $resize)
{
if( $srcW > $srcH )
$reduction = $srcH/$resize;
else
$reduction = $srcW/$resize;

return $reduction;
}

function getMimeType($path)
{
$extension = substr($path,(strpos($path, ".")+1));
$extension = strtolower($extension);
if( $extension == "jpeg" || $extension == "jpg" )
{
$mimetype = "image/jpeg";
}
elseif( $extension == "png" )
{
$mimetype = "image/png";
}
elseif( $extension == "gif" )
{
$mimetype = "image/gif";
}else{
die ("Not a recognized type.");
}
return $mimetype;
}

?>

А теперь как всё это добро использовать:
файл вывода картинки image.php
<?php

include "functions.php";
printSquareImage("image.jpg"); // получить квадратную картинку размером по умолчанию 80x80
// printSquareImage("image.jpg", 300); получить квадратную картинку размером 300x300

?>


Файл в который будем вставлять с помощью HTML нашу картинку:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Квадратная картинка image.php</title>
</head>
<body>
<img src="image.php" />
</body>
</html>

  • 0


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