Хроники лаборатории
Картинка-счетчик на PHP

Есть у меня одна абсолютно бесполезная, но забавная фигулька для LiveInternet.ru: счетчик возраста дневника. Некоторые начали спрашивать, как он устроен. Спрашивали - отвечаем. Сегодня я расскажу вам, как сделать подобный счетчик самостоятельно. Приступим?

Хотя перед тем, как начать, уточню: у вас должен быть в распоряжении хостинг и поддержка на нем PHP с включенным модулем GD. Уже страшо? То ли еще будет. Поехали.

Для начала выберем, что будет отсчитывать счетчик. Я за пример взял одно давнее свое ожидание, выход «StarCraft 2». Blizzard обещает выпустить его двадцать седьмого числа, вот до этого дня и будем считать секунды.

Исходя из темы выбираем фоновую картинку:


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

<?php
// Получаем текущие дату-время
$currdate=getdate();

// Грузим картинку в память
$image=@ImageCreateFromJPEG("sc2.jpg");

// Получаем текущее время в секундах, начиная от 1 января 1970г.
$currdate=$currdate[0];

// Дата выхода SC2 - 27.07.2010
$dh=0; $dm=0; $ds=0; $dmt=7; $dd=27; $dy=2010;
$datedate=mktime($dh,$dm,$ds,$dmt,$dd,$dy);

// Сколько осталось секунд?
$lost=($datedate-$currdate);

// А может, и не осталось ничего уже?
if ($lost<=0) {
$s_write="NUCLEAR\nLAUNCH\nDETECTED";
} else {
// Осталось дней
$lost_d=($lost-$lost%86400)/86400;
$lost=$lost-$lost_d*86400;

// Осталось часов
$lost_h=($lost-$lost%3600)/3600;
$lost=$lost-$lost_h*3600;

// Осталось минут
$lost_m=($lost-$lost%60)/60;
$lost=$lost-$lost_m*60;

// Осталось секунд
$lost_s=$lost%60;

$s_write="REMAIN: \n\n0".$lost_d." DAYS\n".$lost_h." HOURS\n".
$lost_m." MINUTES\n".$lost_s." SECONDS";
}

// Рисуем на картинке текст, подгружая скаченный шрифт
imagettftext($image, 14, 0, 301, 64, 16777215, "starcraft.ttf", "$s_write");

// Отсылаем заголовок: "Это картинка!"
header ("Content-type: image/jpeg");
// Отсылаем заголовок: "Срок годности - минута!"
header ("Expires: ".date("r",($currdate+60)));
// Выгружаем саму картинку...
ImageJPEG($image,null,100);
ImageDestroy($image);
Exit;
?>


В результате получится что-то вроде этого:



Дальше для верности делается всякое кеширование (чтобы не загружать скрипт генерированием картинки каждое обращение) и тому подобные народные забавы, но это я оставлю вам на самостоятельную проработку.


RSS HTML рубрики: приемчикиjuick twitter facebook вконтакте

Случайные записи впридачу:
Быть iPhone'ом. (приемчики)
Маленькое чудо. (жизненное)
Микрозарисовка. (придумалось)

Солодовник Константин (19 июл 2010г, 09:33) [ссылка на комментарий]

Отличная штука, спасибо!
V.exeR (19 июл 2010г, 09:46) [ссылка на комментарий]

u739 Солодовник Константин: тоже ждешь новый StarCraft? :D
Солодовник Константин (19 июл 2010г, 09:50) [ссылка на комментарий]

u71 V.exeR, жду конечно, но мне больше сама идея понравилась. Это же можно любую картинку так сделать :)
V.exeR (19 июл 2010г, 10:04) [ссылка на комментарий]

u739 Солодовник Константин: да я шучу. Да, можно. У меня целы сервис с информерами был (можно было отсчитывать как время до, так и после какой-либо даты), но как-то не прижилось.

А еще можно случайную фразу выдавать. Или... Да в общем, была бы фантазия :D
i-atemi (19 июл 2010г, 11:40) [ссылка на комментарий]

Спасибо, забью в закладки, может пригодится :) .

Если не лень, можно разработки ради поставить сервер с PHP :) . Загрузка и проверка работы происходит гораздо быстрее))).
V.exeR (19 июл 2010г, 12:04) [ссылка на комментарий]

u943 i-atemi: я именно так и тестирую. На «Денвере» :)
zeleboba (20 июл 2010г, 14:36) [ссылка на комментарий]

Извиняюсь, что запутал тебя в жуйке :)
А за мануал спасибо. Просто и доступно. Затащил к себе в закладки, ибо пригодится, думаю, скоро :)
V.exeR (20 июл 2010г, 16:25) [ссылка на комментарий]

u714 zeleboba: да ничего. Кстати, утром упорно искал твой комментарий и свой ответ тут, в блоге. Не найдя, чуть было не решил, что приснилось :D
Зиниченко Ольга (26 июл 2010г, 15:20) [ссылка на комментарий]

«...у вас должен быть в распоряжении хостиг...»
V.exeR (26 июл 2010г, 16:02) [ссылка на комментарий]

u797 Зиниченко Ольга: это тебя смущает? Это не так страшно, как звучит ;)
exs (26 июл 2010г, 16:22) [ссылка на комментарий]

u714 zeleboba, Если ты планируешь такой скрипт на дроидньюс использовать, то сначала со мной побеседуй :D
u797 Зиниченко Ольга, можно и без хостинга, но тогда нужен круглосуточно включённый домашний компьютер с апачем и пхп + если нет выделенного ИП, то воспользоваться сервисом вроде no-ip.com
Кстати @ в коде зло :)
V.exeR (26 июл 2010г, 19:07) [ссылка на комментарий]

u1012 exs:
Кстати @ в коде зло :)

Пофиг, все равно картинку генерю и ошибки отключены :D
QoSyS (27 июл 2010г, 08:39) [ссылка на комментарий]

Зло проявляет себя если не использовать кэширование :)
Не обязательно же только счетчик может быть на картинке, чаще всего какая-нибудь другая информация, которую пропарсили, например, из профиля. Тут определенно нужна задержка )
V.exeR (27 июл 2010г, 08:41) [ссылка на комментарий]

u1000 QoSyS: думаешь, стоит объяснить кеширование?..
QoSyS (27 июл 2010г, 09:03) [ссылка на комментарий]

Да, немного но стоит. Да и самый простой вариант кэширования - по определенному таймауту обновлять картинку - не так уж сложен ) Можно даже без крона обойтись...
Откуда вы?   

Войти через loginza
Оставлять комментарии могут только
имеющие свой ЖЖ-, ЛИру-аккаунт или
еще какой openID (как так?).
Подписаться


Рубрики:

жизненное
аудио-я
видеомонтаж
фотоохота
ремонт
стихи
рассказы
синематограф
библиотека
фонотека
точка зрения
FAQ
приемчики
придумалось
ожидания-прогнозы
допридумано
рингтоны
это я так шучу
обои
микрозарисовки
опасный Интернет
я в печати
поездки-тусовки
смехоспам
мой код
футболки
игродром
подводная жизнь
сайтоводство
программы
персоны
LI.ru
аватарки
курсоры


Разное:

Полка с фильмами
Книжная полка
Полка с играми
Избранное


Календарь записей

2024 (1)
март (1)
2021 (1)
2020 (7)
2019 (3)
2018 (1)
2017 (10)
2016 (12)
2015 (3)
2014 (12)
2013 (10)
2012 (17)
2011 (84)
2010 (172)
2009 (228)
2008 (263)
2007 (154)
2006 (4)
2005 (1)
2004 (1)
2002 (1)
2001 (9)
2000 (9)
1999 (1)
© сайт разработан и поддерживается мной.