Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Работа с JPEG - изменение изображения


Автор: InfMag 11.4.2005, 18:46
Я имею код:
Код

<?php
header("Content-type: image/jpeg");
if ($_GET['src'])
{
    $img = ImageCreateFromJpeg($_GET['src']);
    $imgWidth = ImageSX($img);
    $imgHeight = ImageSY($img);
    $newHeight = 150;
    $new_img = ImageCreateTrueColor(150, $newHeight); 
    ImageCopyResized($new_img, $img, 0, 0, 0, 0, 150, $newHeight, $imgWidth, $imgHeight);
    ImageDestroy($img);
    ImageJpeg($new_img);
    ImageDestroy($new_img);
}
?>

Но дело в том, что $newHeight не должен равняться 150, а должен равняться пропорциональному размеру ширины 150.
То-бишь я уменьшаю любой рисунок до 150, а ширина уменьшается до нужного размера, как это сделает браузер если в теге <img> писать только width, без height.
То-бишь высота рисунка уменьшется относительно уменьшенной ширине.
Мне очень срочно нужно решить эту проблему, прошу помощи. smile

Автор: Aliance 11.4.2005, 19:01
http://pyramidin.narod.ru/html401/tables.html#h-11.2.4.4

Автор: InfMag 11.4.2005, 21:53
Aliance
Ты наверно так неудачно шутишь, да? Причем тут этот хлам? У меня башню кругом воротит. И где там PHP? smile

Автор: Irokez 11.4.2005, 22:07
Код

$newHeight =  round($imgHeight * ($imgWidth / $newWidth));

Автор: penizillin 11.4.2005, 22:10
Цитата(InfMag @ 11.4.2005, 16:46)
То-бишь высота рисунка уменьшется относительно уменьшенной ширине.


есть, скажем, pic.jpg - 800 x 600
снижаем ширину до 150 (определенная величина).

фактор = 150/600 = 0,25

умножаем высоту на фактор:

800*0,25 = 200

значит, новая высота - 200.

Автор: InfMag 12.4.2005, 06:52
Irokez
Видимо ты ошибся. smile Я аж испугался, когдя рисунки стали в два раза большое своего height'а.
Все-равно хоть попытался помочь. smile

penizillin
А в коде ты мне можешь объяснить? А то я так не фтыкаю. smile smile
Добавлено @ 06:56
penizillin
Вот то, что я написал. Работает, но в обратную сторону. smile То-бишь уменьшает высоту.
Код

<?php
header("Content-type: image/jpeg");
if ($_GET['src'])
{
    $img = ImageCreateFromJpeg($_GET['src']);
    $imgWidth = ImageSX($img);
    $imgHeight = ImageSY($img);
    $newWidth = 150;
    $newHeight = round($imgWidth * ($newWidth / $imgHeight));
    $new_img = ImageCreateTrueColor($newWidth, $newHeight); 
    ImageCopyResized($new_img, $img, 0, 0, 0, 0, $newWidth, $newHeight, $imgWidth, $imgHeight);
    ImageDestroy($img);
    ImageJpeg($new_img);
    ImageDestroy($new_img);
}
?>

Автор: Irokez 12.4.2005, 09:20
Цитата(InfMag @ 12.4.2005, 06:52)
Irokez
Видимо ты ошибся. smile Я аж испугался, когдя рисунки стали в два раза большое своего height'а.
Все-равно хоть попытался помочь. smile

сорри, наоборот
Код

$newHeight =  round($imgHeight * ($newWidth / $imgWidth));

Автор: InfMag 12.4.2005, 10:15
Irokez
Ох, превиликое спасибо.
Я замаялся уже думать, а оказалось надо было кое-что переставить местами для обратного эффекта.
Большое еще раз спасибо. smile smile
Добавлено @ 10:17
Кстати, вот готовый код:
image.php
Код

<?php
header("Content-type: image/jpeg");
if ($_GET['src'])
{
    $img = ImageCreateFromJpeg($_GET['src']);
    $imgWidth = ImageSX($img);
    $imgHeight = ImageSY($img);
    $newWidth = 150;
    $newHeight = round($imgHeight * ($newWidth / $imgWidth));
    $new_img = ImageCreateTrueColor($newWidth, $newHeight); 
    ImageCopyResized($new_img, $img, 0, 0, 0, 0, $newWidth, $newHeight, $imgWidth, $imgHeight);
    ImageDestroy($img);
    ImageJpeg($new_img);
    ImageDestroy($new_img);
}
?>

Для тех, кто будет юзать: рисунки смотреть так: <img src="image.php?src=images/picture.jpg"> smile smile

Автор: Irokez 12.4.2005, 10:25
Цитата(InfMag @ 12.4.2005, 10:15)
Для тех, кто будет юзать: рисунки смотреть так: <img src="image.php?src=images/picture.jpg"> smile smile

а вот так вот по большому счету делать нельзя ... сервак можно завалить =)

Автор: Ignat 12.4.2005, 10:27
Цитата(InfMag @ 12.4.2005, 11:15)
image.php?src=images/picture.jpg

а это дырочка в защите smile

Автор: InfMag 12.4.2005, 10:36
Как? Скрипт же тока рисунки обрабатывает. Это же не инклуд. smile
Добавлено @ 10:37
Мне-то впринцыпе как-то по барабану, могу и по id сделать. У меня все рисунки в базе прописаны.

Автор: Irokez 12.4.2005, 10:46
тут просто воможно использовать твой сервак как прокси, напр:
<img src="image.php?src=http://www.yandex.ru/img/logo.gif">
и твой скприт будет генерировать уменьшенный логотип яндекса, поверь злоумышленники найдут как этим воспользоваться smile

Автор: InfMag 12.4.2005, 11:13
Irokez
А... Ну это то понятно. smile Что-ж буду индексировать по id в базе. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)