X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Помогите доработать функцию
sc2r2bey
sc2r2bey
Topic Starter сообщение 12.2.2010, 14:46; Ответить: sc2r2bey
Сообщение #1


вот известная функция, которая создает уменьшенную копию изобажения
[php]<?php

// Функция создающая уменьшенную копию фотографии $filename,
// которая помещается в файл $smallimage
// Уменьшенный вариант имеет ширину и высту равную
// $w и $h пикселам, соответственн.

function resizeimg($filename, $smallimage, $w, $h)

{

// Имя файла с масштабируемым изображением
$filename = $filename;

// Имя файла с уменьшенной копией.
$smallimage = $smallimage;

// определим коэффициент сжатия изображения, которое будем генерить
$ratio = $w/$h;

// получим размеры исходного изображения
$size_img = getimagesize($filename);

// получим коэффициент сжатия исходного изображения
$src_ratio=$size_img[0]/$size_img[1];



// Здесь вычисляем размеры уменьшенной копии, чтобы при масштабировании сохранились
// пропорции исходного изображения
if ($ratio<$src_ratio)
{
$h = $w/$src_ratio;
}
else
{
$w = $h*$src_ratio;
}

// создадим пустое изображение по заданным размерам
$dest_img = imagecreatetruecolor($w, $h);

// создаем jpeg из файла
$src_img = imagecreatefromjpeg($filename);



// масштабируем изображение функцией imagecopyresampled()
// $dest_img - уменьшенная копия
// $src_img - исходной изображение
// $w - ширина уменьшенной копии
// $h - высота уменьшенной копии
// $size_img[0] - ширина исходного изображения
// $size_img[1] - высота исходного изображения
imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $w, $h, $size_img[0], $size_img[1]);

// сохраняем уменьшенную копию в файл
imagejpeg($dest_img, $smallimage);

// чистим память от созданных изображений
imagedestroy($dest_img);
imagedestroy($src_img);

return true;

}

?>[/php]

не всегда известна ширина и высота загружаемого изображения,
поэтому я ее вызываю

resizeimg($image, $smallimage, 150, 150)

но тогда она делает 150 пикселей самую широкую сторону, а как сделать, чтоб она делала 150 пикселей самую узкую сторону?

разобрасля заменил $ratio<$src_ratio на $ratio>$src_ratio


--------------------
Заметки о разработке и не только
программирую web и для we
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 13.2.2010, 0:18; Ответить: ZiTosS
Сообщение #2


sc2r2bey, функция конечно полезная, но поддерживает тока JPG.
Да и функция немного не правильно написана. Обычно задают мин размер одной из сторон. Тогда скрипт сам определит, какая сторона и меньше, ту и подгонит под этот размер, а большую сторону пропорционально уменьшит.
А если ещё задать какую именно сторону сжимать, по ширине или по высоте, то будет ещё удобнее создавать картинки предпросмотра в галереях. В этом случае они все будут вровень либо по высоте, либо по ширине.

разобрасля заменил $ratio<$src_ratio на $ratio>$src_ratio

Тему можно закрывать? Или всё же функция нуждается в доработке?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
sc2r2bey
sc2r2bey
Topic Starter сообщение 13.2.2010, 0:27; Ответить: sc2r2bey
Сообщение #3


можно здесь поподробнее(очень ценные замечания!)?


--------------------
Заметки о разработке и не только
программирую web и для we
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 13.2.2010, 0:43; Ответить: ZiTosS
Сообщение #4


sc2r2bey, вот тебе код класса, который создаёт thumb_image, Посмотри как тут всё реализовано:
[php]<?php
//requires GD 2.0.1 or higher
class ThumbnailImage{
//private data mambers
var $image;
var $maxdimension;
//not applicable to gif or png
var $quality=100;
var $fileextension;
var $mimetype;
var $imageproperties;
var $types= array("jpg", "jpeg", "gif", "png");
////////////////////////////////////////////////////////
//constructor
////////////////////////////////////////////////////////
function ThumbnailImage($path, $maxdimension=100){
$this->maxdimension=$maxdimension;
//check path
is_file($path) or die ("File: $path doesn't exist.");
//check type
$extension=substr($path,(strpos($path, ".")+1));
$extension= strtolower($extension);
in_array($extension, $this->types) or die ("Incorrect file type.");
$this->fileextension=$extension;
$this->setMimeType($extension);
//get dimensions by creating imageproperties
$this->imageproperties = GetImageSize($path);
//create image
if($extension=="jpeg" || $extension=="jpg"){
$this->image=imagecreatefromJPEG($path);
}elseif($extension=="gif"){
$this->image=imagecreatefromGIF($path);
}elseif($extension=="png"){
$this->image=imagecreatefromPNG($path);
}else{
die("Couldn't create image.");
}
$this->createThumb();
}
////////////////////////////////////////////////////////
//public methods
////////////////////////////////////////////////////////
function getImage(){
header("Content-type: $this->mimetype");
if($this->fileextension=="jpeg" || $this->fileextension=="jpg"){
imagejpeg($this->image,"",$this->quality);
}elseif($this->fileextension=="gif"){
imagegif($this->image);
}elseif($this->fileextension=="png"){
imagepng($this->image);
}else{
die("Couldn't create image.");
}
}
////////////////////////////////////////////////////////
function getMimeType(){
return $this->mimetype;
}
////////////////////////////////////////////////////////
function getQuality(){
$quality;
if($this->fileextension=="jpeg" || $this->fileextension=="jpg"){
$quality=$this->quality;
}else{
$quality=-1;
}
return quality;
}
////////////////////////////////////////////////////////
function setQuality($quality){
if($quality > 100 || $quality < 1)
$quality=75;
if($this->mimetype=="image/jpeg"){
$this->quality=$quality;
}
}
////////////////////////////////////////////////////////
function destroy(){
imagedestroy($this->image);
}
////////////////////////////////////////////////////////
//private methods
////////////////////////////////////////////////////////
function setMimeType($extension){
if($extension=="jpeg" || $extension=="jpg"){
$this->mimetype="image/jpeg";
}elseif($extension=="png"){
$this->mimetype="image/png";
}elseif($extension=="gif"){
$this->mimetype="image/gif";
}else{
die ("Not a recognized type.");
}
}
////////////////////////////////////////////////////////
function createThumb(){
$srcW=$this->imageproperties[0];
$srcH=$this->imageproperties[1];
//only adjust if larger than max
if($srcW>$this->maxdimension || $srcH>$this->maxdimension){
$reduction=$this->calculateReduction($srcW,$srcH);
//get proportions
$desW=round($srcW/$reduction);
$desH=round($srcH/$reduction);
//check for gif
//create copy from original
if($this->mimetype=="image/gif"){
$copy=imagecreate($desW, $desH);
}else{
$copy=imagecreatetruecolor($desW, $desH);
}
imagecopyresampled($copy,$this->image,0,0,0,0,$desW, $desH, $srcW, $srcH)
or die ("Image copy failed.");
//destroy original
imagedestroy($this->image);
$this->image=$copy;
}
}
////////////////////////////////////////////////////////
function calculateReduction($srcW, $srcH){
//adjust
if($srcW<$srcH){
$reduction=$srcH/$this->maxdimension;
}else{
$reduction=$srcW/$this->maxdimension;
}
return $reduction;
}
}//end class
////////////////////////////////////////////////////////
?>[/php]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
sc2r2bey
sc2r2bey
Topic Starter сообщение 13.2.2010, 0:48; Ответить: sc2r2bey
Сообщение #5


блин опять класс ;)


--------------------
Заметки о разработке и не только
программирую web и для we
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 13.2.2010, 1:07; Ответить: ZiTosS
Сообщение #6


sc2r2bey, его использование
файл image.php
[php]$Thumb = new ThumbnailImage('[путь до уменьшаемого изображения]', [min размер стороны]); // создаём объект картинки предпросмотра
$Thumb->getImage(); // выводим картинку предпросмотра[/php]
файл HTML
...
<img src=".../image.php" />
...

Ну это всё к примеру, путь до файла можно передавать в GET параметре в зашифрованном виде. А можно и в нешифрованном.
Думаю, заметно как удобно использовать данный класс, так же можно назначать качество JPG, интерфейс на нормальном уровне.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
sc2r2bey
sc2r2bey
Topic Starter сообщение 13.2.2010, 1:09; Ответить: sc2r2bey
Сообщение #7


у меня есть эта книга и скрипты к ней, пока не хочу лезть в классы, пока с линейным не разберусь на уверенно ;)


--------------------
Заметки о разработке и не только
программирую web и для we
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
gaaarfild
gaaarfild
сообщение 12.3.2010, 16:57; Ответить: gaaarfild
Сообщение #8


Лезь и не переживай. =) линейное уже освоено. Я поначалу физически не понимал их. оказалось, что проще. =)

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Помогите вспомнить рекламного бота Телеграм для обмена рекламой
0 Mixatraider 725 21.2.2024, 23:42
автор: Mixatraider
Открытая тема (нет новых ответов) Помогите рещить проблему с монитором.
Почему низкое разрешение при подключении монитора через displayport?
0 Levels 1702 11.12.2020, 0:48
автор: Levels
Открытая тема (нет новых ответов) Помогите кто нибудь получить партнерку Росбанк!
7 heisenberg_mw 2341 7.8.2020, 9:28
автор: heisenberg_mw
Открытая тема (нет новых ответов) Помогите найти тему пожалуйста
7 virtas 12502 24.7.2020, 17:02
автор: -JamesSmips-
Открытая тема (нет новых ответов) Доработать Сайт
Нужна доработка сайта
0 nazar2292 1287 31.3.2020, 12:59
автор: nazar2292


 



RSS Текстовая версия Сейчас: 20.4.2024, 9:32
Дизайн