2009-12-04

Маска, маска я тебя знаю

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

Почемуто в GD нет функций для работы с масками. Пришлось изобретать самим, и вот что получилось:

Так выглядит код маскирования:

$image = imagecreatefromgif('image.gif');
$mask = imagecreatefromgif('mask.gif');

$dest = imagecreatetruecolor(imagesx($image),imagesy($image));

imagemask($dest,$image,$mask);

header('Content-type: image/jpeg');
imagepng($dest);

Код самой функции маскирования:

function imagemask($dest,$image,$mask){
	$width =  imagesx($image);
	$height = imagesy($image);
	
	$tc = imagecolorallocate($dest,0,0,0);
	imagecolortransparent($dest,$tc);
	
	for($i=0;$i<$width;$i++){
		for($j=0;$j<$height;$j++){
			$c = imagecolorat($image,$i,$j);
			$color = imagecolorsforindex($image,$c);
			
			$c = imagecolorat($mask,$i,$j);
			$mcolor = imagecolorsforindex($mask,$c);
			
			if (!($mcolor['red']==255 && $mcolor['green']==255 && $mcolor['blue']==255)){
				$c = imagecolorallocate($dest,$color['red'],$color['green'],$color['blue']);
				imagesetpixel($dest,$i,$j,$c);
			} 
		}
	}
}

Правда расстраивает, что GD так и не научилась работать нормально с полупрозрачностью - если кто знает способ, расскажите плиз.

 

Коментариев: 1

 
  2009-12-01

Сравнение хостингов

На PHPClasses есть довольно полный список различных хостингов. Правда Линода там нет, а жаль. Прошел месяц как я переехал на линод - пока меня все устраивает.

 

Оставить комментарий

 
  2009-12-01

Зима пришла

Поздравляю с первым днем зимы. Кому как а мне такая погода нравится :) Дороги сухие, можно ездить на летней резине. Главное не проворонить момент и переобуться.

 

Оставить комментарий

 
  2009-11-27

Стоунхедж, пирамиды и все все все

Что мы знаем про человечество раньше последних пяти-шести тысячелетий? Практически ничего. До нас дошли пирамиды, Стоунхендж, каменные истуканы острова Пасхи - так по мелочи.

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

Это напоминает как в Ералаше: мальчик стоит в луже, вокруг него собираются прохожие и задают себе вопрос - зачем он стоит в луже? Он же простудится, зачем он это делает?  И когда собирается достаточно народу мальчик хитро улыбаясь высоко подпрыгивает и всех любопытных обрызгивает с ног до головы водой из лужи.

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

Честно говоря камни как камни. Современными средствами притащить их не составит большого труда. Вот только зачем? То, что их притащили за столько километров говорит не о том что те кто их притащили имели для этого вескую причину, это говорит о том что в их руках была сосредоточена власть заставить своих соплеменников делать то что они хотят. Даже бессмысленные и бесполезные действия вроде строительства пирамид или высечения рож из скал и перетаскивания их на побережье.

Почему пирамиды в Египте похожи на пирамиды Атцтеков? А вы попробуйте сделать что нибудь друге из глыб известняка. Известняк очень непрочный материал и ничего долговечного кроме пирамид из него не получается. Путешествуя по Золотому Кольцу я видел несколько церквей сложенных из известняка - толстенные стены, внутри практически нет места - почти пимамиды. Кстати, самые долговечные церкви это те что сложены из известняка. Однако, нагрузки не фундамент настолько велики что и они портятся гораздо быстрее пирамид.

В наше время ничего не изменилось. Взять хотя бы центральное отопление в городе - по масштабам бессмысленности явление не знает себе равных. Пирамиды и Стоунжендж - нервно курят в сторонке.

Во всем мире нет такого понятия как Центральное Отопление Всего Города. В Лондоне в каждом доме, в каждой квартире стоит газовый котел, который опапливает только этот дом или квартиру. Иногда, если дом большой, делают отдельную котельную. Сколько газа в дом пришло, сколько воды ты потребил за эти ресурсы столько ты и платишь. Получается, кстати не так дорого. У нас же в теплотрассах теплопотери составляют до 70 процентов тепла - трубы как их не утепляй все равно греют улицу - ведь большая часть их находится на улице. Вода из них хлещет постоянно - тоже потери, уже теплоносителя. ТЭЦ - это мегалитические сооружения сжигающие столько углеводородов что страшно становится. Так как трубы работают в прерывистом режиме - летом вода из них сливается - они корродируют с немыслимой скоростью и каждый год их нужно менять, при этом кстати страдают все остальные коммуникации, сооружения, дороги, кабеля, газоны - все все все.

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

Скажете что трубы сгниют через год если их не перекладывать, а Стоунхендж простоял тысячи лет? Не в долговечности дело. Просто у древних строителей не было бетона. Если бы был обязательно бы сделали из него - это и дешевле и проще и получается красивее. Но у бетона есть одна особенность. Помните как делают бетон? Берут цемент, смешивают с песком, добавляют воду, перемешивают - вся масса затвердевает. Куда девается вода? Многие думают что она испаряется. Как же. Вода в бетоне составляет половину объема. Хрен испаришь такой объем. Она химически связывается с цементом образуя полимер. Если убрать из бетона воду, например, обжечь его при высокой температуре, полимерные связи рвутся, вода испаряется а цемент и песок снова оказываются в своём первозданном сыпучем виде. Процесс занимает больше времени при комнатной температуре, но все равно бетон - это не долговечный материал и через сто лет все бетонные строения превращаются в пыль из которой и были сделаны первоначально. Вода делает любой материал недолговечным.

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

Скажете что пирамиды строили рабы, а трубы теплотрасс сейчас кладутся свободными рабочими?

А значит вы считаете что вы не рабы? Тогда не идите завтра на работу(в школу в институт)!

Что слабо?

Мы делаем как заведенные то что делаем, не зависимо от того работаем мы за зарплату, или у нас свое дело. Учимся ли мы в школе, или студенты. Рабские установки у нас в голове. Нас воспитали делать то что делают все. Кто знает, может строителей Стоунхенджа неплохо кормили и это была престижная работа куда стремились те же крестьяне - крестьяне ведь тоже платили налоги, которые шли также на строительство всяких там Стоунхенджей, памятников Петру Перовому или Вторых Транспортных Колец... Точна также как делаем мы. Современное экономическое принуждение гораздо эффективнее физического - не нужно столько надсмотрщиков, плеток и так далее - все принуждение в голове самих рабов - очень удобно и практично.

 

Оставить комментарий

 
  2009-11-23

Если захотелось покушать

Хочется поделиться рецептом что делать если хочется кушать а дома нет еды, или вы на работе а столовая где вы обычно питаетесь не работает... Или нужно устроить романтический ужин при свечах а из еды вы умеете готовить только яичницу....

В общем, если вы живете в Саратове - можно набрать 292303 и заказать шикарнейшую итальянскую пиццу.

Ресторан "У Андрэ", что на пересечении Рахова и Посадского — на мой взгляд, лучшее заведение в Саратове где делают пиццу. Не тот пирог с колбасой который делают в Ташире а именно пиццу — с тонким тестом. Причем, у них есть и доставка по городу. Цены — вполне умеренные  только что принесли в офис — пицца "Традиционная" обошлась вместе с доставкой 263 рубля. Привезли меньше чем за час.

 

Коментариев: 1

 
  2009-11-19

Wenn ein Mensch lebt

Блин... нужно обязательно подобрать аккорды. Как то их творчество мимо меня прошло... А ведь группа, похоже, весьма культовая была в свое время.


Wenn ein Mensch kurze Zeit lebt
Sagt die Welt, dass er zu frueh geht.
Wenn ein Mensch lange Zeit lebt
Sagt die Welt, es ist Zeit.

Meine Freundin ist schoen
Als ich aufstand, ist sie gegangen.
Weckt sie nicht, bis sie sich regt
Ich habe mich in ihren Schatten gelegt.

Jegliches hat seine Zeit,
Steine sammeln,
Steine zerstreu'n,
Baeume pflanzen,
Baeume abhau'n,
Leben und sterben und Streit.

Wenn ein Mensch kurze Zeit lebt
Sagt die Welt, dass er zu frueh geht.
Wenn ein Mensch lange Zeit lebt
Sagt die Welt, es ist Zeit.

Jegliches hat seine Zeit,
Steine sammeln,
Steine zerstreu'n,
Baeume pflanzen,
Baeume abhau'n
Leben und sterben und Frieden und Streit.

Weckt sie nicht, bis sie selber sich regt.
Ich habe mich in ihren Schatten gelegt.

Wenn ein Mensch kurze Zeit lebt,
Sagt die Welt, dass er zu frueh geht.

Weckt sie nicht, bis sie sich regt.
Ich hab' mich in ihren Schatten gelegt.

Meine Freundin ist schoen, als ich aufstand ist sie gegangen.
Weckt sie nicht, bis sie sich regt.
Ich habe mich in ihren Schatten gelegt.

Слова главное простые, обязательно выложу в Аккорды. Вопрос: перевод нужен?

 

Коментариев: 1

 
  2009-11-18

Занятный фокус с JS

За что я люблю JS это за то что на нем можно реализовать некоторые вещи совершенно нетривиальным способом. Например такая задача: Есть IFRAME который создается динамически, нужно привесить событие onload на объект window внутри этого IFRAME. Сразу после создания свойство contentWindow равно нулю, поэтому непосредственно после создания доступа к нему нет. Оно станет доступно через некоторое время. Логичным будет проверять на ноль свойство каждые сто миллисекунд пока оно не будет чему нибудь равно:

var onloadfunc = function(){
    alert('loaded!!!');
};
        
(function(){
    if (!iframe.contentWindow){
         setTimeout(arguments.callee,100);
         return;
    }
    iframe.contentWindow.onload = onloadfunc;
})();

В приведенном примере анонимная функция вызывает саму себя через каждые 100 миллисекунд. Интересно что когда это писал - забыл поставить точку с запятой в }; - это привело к интересной штуке - калбак стал вызываться на этапе инициализации - т.е. скобки имеют наивысший приоритет даже если между ними стоит перенос строки.

 

Коментариев: 1

 
  2009-11-16

Когда наступит конец света

Сейчас модно говорить о новом конце света который якобы наступит когда переполнится разрядная сетка календаря индейцев Майя - это наступит в 2012 году.

К чему я это? На всякий случай если конец света в 2012 году не наступит - то следующий нужно непременно ждать тогда когда переполнится разрядная сетка тридцатидвухбитного целого знакового числа, используемого для хранения даты в Unix системах.

Всем известно что для хранения даты в Unix используется так называемый unixtimestamp - число секунд прошедших с начала Unix эпохи - 1 января 1970 года. Это несложно проверить:

print date('r',0);

Thu, 01 Jan 1970 03:00:00 +0300

в большинстве компьютеров сейчас для хранения даты используется переменная типа int - размер которой равен размеру машинного слова - сейчас это 32 байта. Причем переменная эта знаковая, т.е. максимальное целое значение которое она может принимать - 0x7FFFFFFF или 2147483647. Несложно подсчитать что 2147483647 секунд это примерно 68 лет.

Понятно? Это вам не индейцы Майя, которые давно исчезли, но их календарь актуален до наших дней, тут всего каких то 68 лет - и каюк - прошла эра Unix.

Так когда же наступит конец света для всех 32-x битных Unix систем? Получить ответ очень просто:

print date('r',0x7FFFFFFF);

Tue, 19 Jan 2038 06:14:07 +0300

Это случится 19 января 2038 года ровно с шесть часов четырнадцать минут и семь секунд по московскому времени.

Готовьтесь.

 

Оставить комментарий

 
  2009-11-14

Дороги

На пересечении Соколовой и Рахова есть перманентно открытый канализационный люк.

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

 

Оставить комментарий

 
  2009-11-13

Универсальный ключ для домофона

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

Такую систему взломать будет совершенно невозможно - современная математика не может пока дать сколь угодно приемлемый сценарий подбора закрытого ключа по имеющемуся открытому.

Однако, каково было мое удивление когда в ларьке который делает ключи увидел объявление что мол де делают ключи для домофонов на раз. Как? Оказывается никаким RSA там и не пахнет - наши отечественные Цифрал и хваленые оригинальные Dallas Semiconductor - хранят обычную последовательность последовательность из n-бит которую сдают первому встеречному-поперечному домофону. Узнать код можно простыми подручными средствами.

Занятно, что по запросу "универсальный ключ для домофона" гугл в 99 процентов случаев выдает ссылки на сайты мошенников, однако вот нашел в сети девайс который похоже настоящий.

Вопрос - если ключ такой простой, то есть ли более компактное устройство - а не этот уродливый комбайн с цифирками?

 

Коментариев: 12