Xpoint
   [напомнить пароль]

Обработка изображений с базы

Метки: [без меток]
2007-09-24 13:57:57 [обр] Winner[досье]
Привет Всем!
Пожалуйста, подскажите кто знает. Изображение храниться в базе (так надо). Вопрос в том как его обрабатывать с помощью РНР забирая прямо с базы. Как получить идентификатор изображения для этого, ведь imagecreatefromjpeg в качестве аргумента требует УРЛ изображения.
спустя 20 минут [обр] Валера(6/24)[досье]
Winner[досье], как вариант можете создавать на диске временный файл и в imagecreatefromjpeg подсунуть путь к этому файлу. Пример:
$tmpfname = tempnam ("/tmp", "FOO");

$fp = fopen($tmpfname, "w");
fwrite($fp, "writing to tempfile");
fclose($fp);

// здесь используем imagecreatefromjpeg($tmpfname)
///...

unlink($tmpfname);
спустя 51 секунду [обр] Lynn «Кофеман»(98/571)[досье]
спустя 12 минут [обр] Winner[досье]
Спасибо Всем и особенно Lynn!
спустя 21 час [обр] Winner[досье]
Радость моя омрачена. Не очень мне хочеться применять ob_get_contents() для перехвата вывода от imagejpeg , что то мне сдается, что довольно тормозной он. Вывод в файл не подходит- мне нужно сохранить в базе. Пожалуйста, подскажите лучший вариант.
спустя 1 час 19 минут [обр] Алексей Севрюков(162/1280)[досье]

Winner[досье] Причем здесь ob_ вообще? Достали из базы содержимое картинки, сохранили в скаляре и передали в imagecreatefromstring.

Или Вы чего то не договариваете по условиям задачи?

спустя 30 минут [обр] Winner[досье]
Алексей Севрюков, представте себе вот такое вот безобразие: Достали Вы из базы содержимое картинки, обработали и опять в базу спрятали. Жуть одним словом. Вот как обратно упрятать обработанную картинку без ob_ если РНР норовит ее или в браузер впихнуть или в файл?
спустя 27 минут [обр] Lynn «Кофеман»(98/571)[досье]
Winner[досье]
С чего вы решили, что тормозит ob_get_contents?
спустя 21 минуту [обр] Winner[досье]
Не помню где читал, что буферизация вывода ощутимо тормозит скрипт. Это не так?
спустя 22 минуты [обр] Леонид Сысолетин(4/14)[досье]

Winner[досье]

...и опять в базу спрятали.

Это зачем, простите?
Достали - сплюнули клиенту. Где тут изменение, после которого опять в базу писАть?

спустя 5 минут [обр] Winner[досье]

Провел эксперимент на скорость исполнения скрипта с буферизацией echo переменной со строкой и присвоение этой переменной другой переменной:


  1. буферизация- 0.000250
  2. присвоение переменной- 0.000145

Итого разница 58%


Это маленькая разница?

спустя 42 минуты [обр] Дмитрий Попов(171/509)[досье]
Winner[досье]
Ога... А теперь тоже самое но с большим объемом - например с той же картинкой.
спустя 41 минуту [обр] Winner[досье]

Дмитрий Попов, пожалуйста, эксперимент с картинкой выбранной из базы:
0.000365
0.000156

Итого: 234%.

спустя 26 минут [обр] Дмитрий Попов(171/509)[досье]
сообщение промодерировано

А давайте с Вами учитсья правильно проводить подобные тесты?

<?php
$use_ob=false;
{
    if($use_ob) ob_start();
    $im=imagecreate(100,100);
    if(!$use_ob) imagejpeg($im);
    else 
    {
        imagejpeg($im);
        $cont=ob_get_contents();
        ob_end_clean();
        echo $cont;
    }
}

?>
<?php

$start=microtime(true);
for ($i=0;$i<100;$i++)
{
    file_get_contents('http://[path2file2]');
}

$end=microtime(true);

echo ($end-$start);
?>

$use_ob=true : 5.1562969684601
$use_ob=false: 5.1269268989563

спустя 24 минуты [обр] Winner[досье]
Дмитрий Попов, полностью согласен с Вами - file_get_contents() в обоих случаях работает почти с одинаковой скоростью.
спустя 4 минуты [обр] Алексей Севрюков(162/1280)[досье]

Winner[досье]

Алексей Севрюков, представте себе вот такое вот безобразие: Достали Вы из базы содержимое картинки, обработали и опять в базу спрятали.

Ну так это разовая операция, какая разница будет тормозить или не будет. Вы же не будете каждый раз обрабатывать картинку? Если обрабатываете каждый раз, то значит используете неверный подход, нужно кэшировать результаты обработки.

спустя 5 минут [обр] Дмитрий Попов(171/509)[досье]

Winner[досье]
Вы издеваетесь, или просто очень умный?

ЗАмените file_get_contents на локальный вызов вида:
`/usr/bin/php path_to_script`
Или уберите вообще второй скрипт, в первом замените imagejpeg($im) на imagejpeg($im,'path_to_othe_rfile')

Результат не изменится.
Тока не надо сюда опять пихать реузльат какого-то мифического теста с вызовом одной переменной на чтение один раз. Это полный бред.

спустя 44 минуты [обр] Winner[досье]
Дмитрий Попов, не стоит волноваться, я опять полностью согласен с Вами – это полный бред говорить об одном а мерять третье.
спустя 55 минут [обр] Дмитрий Попов(171/509)[досье]
угу... мерить результат работы целой функции на одном присваивании одной переменной это безусловно гораздо больше приближенно к реальным условиям.
спустя 20 минут [обр] Winner[досье]
Дмитрий Попов, не хочу Вас шокировать но обычно в скриптах не устраиваются циклы на ровном месте. Да, такова жестокая реальность мира людей. Это по поводу мифичности. Что же касается бредовости теста то всегда полезно предварительно посмотреть на свой скрипт и ответить самому себе на вопрос – что же я здесь сердешный меряю.
спустя 22 минуты [обр] Дмитрий Попов(171/509)[досье]

Winner[досье]
Я тоже не хочу Вас расстраивать, но обычно скрипт вызывается не один раз. И так же обычно в скрипте происходит чуть больше действий чем вызов одной переменной.
И так же я не хочу Вас расстраивать информацией о том, что если этот скрипт вызывается один раз в час, то говорить о производительности так же мифично.
Т.е. я не хочу Вас расстраивать лишней для Вас информацией о таких понятиях как "погрешность" и "статистика".

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

спустя 41 минуту [обр] Winner[досье]
Дмитрий Попов, спасибо за участие в обсуждении. А по поводу тестового скрипта не надо так расстраиваться, ну подумашь чушь получилась, ну с кем не бывает. Бывает и хуже, да правда, реже.
спустя 16 минут [обр] Дмитрий Попов(171/509)[досье]

Я, дурак, составил неправильный скрипт. Автор это увидел. Я безусловно не прав, т.к. надо было самому составить корректный тестовый скрипт, который выполнял бы задачу автора.
Безусловно, это был повод за это зацепиться и перейти на хамство, вместо того, что бы написать корректный тест. Главное - что мой не подходит.

И ob_start безусловно даёт задержку на реально что-то делающих скриптах в 200%.

Первый раз жалею о своих административных правах на этом форуме - не имею права срываться.

спустя 7 часов [обр] Алексей В. Иванов(509/2861)[досье]
сообщение промодерировано

Дмитрий Попов[досье] зачем же жалеть? Гордитесь! Отреагировать адекватно дорогого стоит) А нервничать бестолку. Нам надо беречь своё здоровье)

Winner[досье] вы напрасно говорите об эффективности, когда речь идёт о чтении и записи картинок в БД. Вы же понимаете, что "буферизация ~ 0.000250, присвоение переменной ~ 0.000145" и работа с файлами из БД будет от 0.100000 и выше. Разница в сотни и тысячи порядков. Именно поэтому, если вы хороший программист, то оптимизировать будете там, где большой выигрыш, а не на лишних присвоениях.

Powered by POEM™ Engine Copyright © 2002-2005