Модераторы: Aliance, skyboy, MoLeX, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ресайз картинки (факи читал) 
V
    Опции темы
jkffdwitnas
Дата 6.5.2010, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 25.10.2009

Репутация: нет
Всего: нет



хочу ресайзить картинки
беру самый простой пример

Код

<?php

function pic($name_big)
{
    header('Content-type: image/jpeg');
    list($width, $height) = getimagesize($name_big);
    $s_im=imagecreatefromjpeg($name_big);
    $d_im=imagecreatetruecolor(100, 100);
    imagecopyresampled($d_im, $s_im, 0, 0, 0, 0, 100, 100, $width, $height);
    imagejpeg($d_im);
    ImageDestroy($d_im);
};

$img="/images/stories/prod/displays/lg/M1962D-PZ.jpg";

pic($img);

?>


и получаю фигу, смотрим исходный код страницы, а там 
Код

яШяааю CREATOR: gd-jpeg v1.0 (using IJG JPEG v62) и дальше много букв и символов

что не так? 

Это сообщение отредактировал(а) jkffdwitnas - 6.5.2010, 16:42
PM MAIL WWW   Вверх
ksnk
Дата 6.5.2010, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 2
Всего: 386



jkffdwitnas, а если посмотреть "исходный код" какой-нибудь картинки? Неужели в ней будут html теги?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
jkffdwitnas
Дата 6.5.2010, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 25.10.2009

Репутация: нет
Всего: нет



а почему черный квадрат?
PM MAIL WWW   Вверх
skyboy
Дата 6.5.2010, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 3
Всего: 260



ты не можешь формировать HTML код и сразу отдавать бинарное содержимое(вообще-то, можешь, но для этого надо использовать data: URI-схему и base64-кодирование, но это нафиг не кроссбраузерно и ограничено объемом в несколько килобайт, потому тебе это навряд ли подойдет).
у тебя скрипт ресайза должен быть отдельно:
Код

<?php
$img="/images/stories/prod/displays/lg/M1962D-PZ.jpg";
echo '<img src="resize.php?filename='.$img.'">';
?>

resize.php:
Код

if (!empty($_GET['filename'])) {
    $name_big = realpath($_GET['filename']);
    header('Content-type: image/jpeg');
    list($width, $height) = getimagesize($name_big);
    $s_im=imagecreatefromjpeg($name_big);
    $d_im=imagecreatetruecolor(100, 100);
    imagecopyresampled($d_im, $s_im, 0, 0, 0, 0, 100, 100, $width, $height);
    imagejpeg($d_im);
    ImageDestroy($d_im);
} else {
 trigger_error('Filename has not set');
}

сюда, правда, надо ещё добавить проверку на существование файла(чтоб выдать вменяемое сообщение об ошибке)
PM MAIL   Вверх
jkffdwitnas
Дата 6.5.2010, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 25.10.2009

Репутация: нет
Всего: нет



парни, я честный программер, пока все не попробую на форум не пишу

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

http://at5.ua/size/test.php

PM MAIL WWW   Вверх
ksnk
Дата 6.5.2010, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 2
Всего: 386



а что выводит вот такая функция
Код

function pic($name_big)
{
    header('Content-type: image/jpeg');
    readfile($name_big);
}

?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
jkffdwitnas
Дата 6.5.2010, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 25.10.2009

Репутация: нет
Всего: нет



Код

<?php
$img="/images/stories/prod/displays/lg/M1962D-PZ.jpg";
//echo '<img src="resize2.php?filename='.$img.'">';

function pic($name_big)
{
    header('Content-type: image/jpeg');
    readfile($name_big);
}

pic($img);

?>


результат - пустая страница

Добавлено через 5 минут и 57 секунд
php 5.2.13
GD 2.0.34
PM MAIL WWW   Вверх
ksnk
Дата 6.5.2010, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 2
Всего: 386



Картинки, однако нету, значит....


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
jkffdwitnas
Дата 6.5.2010, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 25.10.2009

Репутация: нет
Всего: нет



тестим дальше:

если делаем через 2 файла
test.php (ни относительный ни абсолютный пути не работают)
Код

<?php
$img="/images/stories/prod/displays/lg/M1962D-PZ.jpg";
$img="http://at5.ua/images/stories/prod/displays/lg/M1962D-PZ.jpg";
echo '<img src="resize4.php?filename='.$img.'">';
?>

resize4.php(это другой код немного):
Код

$img = realpath($_GET['filename']);

$src = imagecreatefromjpeg($img);
$w_src = imagesx($src);
$h_src = imagesy($src);
header("Content-type: image/jpeg");
$w = 90;
$ratio = $w_src/$w;
$w_dest = round($w_src/$ratio);
$h_dest = round($h_src/$ratio);
$dest = imagecreatetruecolor($w_dest,$h_dest);
imagecopyresampled($dest, $src, 0, 0, 0, 0, $w_dest, $h_dest, $w_src, $h_src);
imagejpeg($dest,'',100);
imagedestroy($dest);
imagedestroy($src);


то не работает.



если вызываю в браузере просто resize4.php, где вместо 
Код

$img = realpath($_GET['filename']);

написан абсолютный путь (относительный тоже не работает)
Код

$img="http://at5.ua/images/stories/prod/displays/lg/M1962D-PZ.jpg";


то работает, то есть выводится уменьшенная картинка, значит сервер может это делать
теперь вопрос: что с лыжами?
PM MAIL WWW   Вверх
ksnk
Дата 6.5.2010, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 2
Всего: 386





--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
jkffdwitnas
Дата 6.5.2010, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 25.10.2009

Репутация: нет
Всего: нет



делать то че? нужно чтобы оно работало как skyboy писал, в двух файлах
PM MAIL WWW   Вверх
ksnk
Дата 6.5.2010, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 2
Всего: 386



Код

<?php
  echo dirname(__FILE__);
?>

?

скорее всего нужно написать 
$img="images/stories/prod/displays/lg/M1962D-PZ.jpg";
однако возможны варианты

Это сообщение отредактировал(а) ksnk - 6.5.2010, 17:42


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
jkffdwitnas
Дата 6.5.2010, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 25.10.2009

Репутация: нет
Всего: нет



Код

<?php
  echo dirname(__FILE__);
?>


/var/www/...

Добавлено через 9 минут и 46 секунд
заработало вот так
test.php
Код

$img="/images/stories/prod/displays/lg/M1962D-PZ.jpg";
echo '<img src="resize4.php?filename='.$img.'">';

resize4.php
Код

$img = $_SERVER['DOCUMENT_ROOT'].$_GET['filename'];


ksnk, спасибо тебе огромное

Это сообщение отредактировал(а) jkffdwitnas - 6.5.2010, 17:51
PM MAIL WWW   Вверх
jkffdwitnas
Дата 7.5.2010, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 25.10.2009

Репутация: нет
Всего: нет



добрый вечер, Санта-Барбара продолжается:
теперь все работает, кроме квадратных картинок, посмотрите код плз (тут вместе с кешированием), подскажите плз если где ошибки (мне "_!_" не нравится)
Код

$img = $_SERVER['DOCUMENT_ROOT'].$_GET['filename'];
$CACHE_DIR = $_SERVER['DOCUMENT_ROOT']."/images/stories/cache";
$chache_name = substr($img,36); // displays/lg/M1962D-PZ.jpg
$chache_name = str_replace("/","_!_",$chache_name); //  displays_!_lg_!_M1962D-PZ.jpg
$chache_name = $CACHE_DIR.'/'.$chache_name; // var/www/.../images/stories/cache/displays_!_lg_!_M1962D-PZ.jpg

// если кешированный эскиз уже существует, отдать его и завершить работу
if (file_exists ($chache_name)){
    header ('Content-type: image/jpeg');
    readfile ($chache_name);
    exit ();
}

// если исходный файл не существует, завершить работу
if (!file_exists($img)){ exit(); }

// иначе — создаём новый эскиз
ob_start ();
// ------------------------------------------------------------

    $w = 120; $h = 120;

    $src = imagecreatefromjpeg($img);
    $w_src = imagesx($src);
    $h_src = imagesy($src);

    header("Content-type: image/jpeg");

    if ($w_src != $h_src) {
        if ($w_src > $h_src) {
        $ratio = $w_src/$w;
        } else {
        $ratio = $h_src/$h;
        }
        $w_dest = round($w_src/$ratio);
        $h_dest = round($h_src/$ratio);
        $dest = imagecreatetruecolor($w_dest,$h_dest);
        imagecopyresampled($dest, $src, 0, 0, 0, 0, $w_dest, $h_dest, $w_src, $h_src);
    } else if ($w_src == $h_src) {
        $dest = imagecreatetruecolor(120,120);
        imagecopyresampled($dest, $src, 0, 0, 0, 0, 120, 120, $w_src, $h_src);
    }

    imagejpeg($dest,'',100);
    imagedestroy($dest);
    imagedestroy($src);

// ------------------------------------------------------------
$content = ob_get_contents (); // записываем в $content содержимое эскиза
if (@$fp = fopen ($chache_name,'wb+')) // если всё хорошо, создаём файлик с кешем и пишем туда содержимое
{
    fputs ($fp,$content);
    fclose ($fp);
    ob_end_flush (); // выводим эскиз
} else {
    @ob_end_clean (); // очищаем буфер
}

вопрос в квадратных картинках, с прямоугольными все отлично, вместо квадратных - черные квадраты
пример тут http://at5.ua/resize/test.php
PM MAIL WWW   Вверх
ksnk
Дата 7.5.2010, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 2
Всего: 386



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


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Графика | Следующая тема »


 




[ Время генерации скрипта: 0.0625 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.