This Might Be Useful

Archive for the ‘Programming’ Category

Изменяем размеры картинки с сохранением прозрачности (PHP+GD)

Friday, January 30th, 2009 | PHP | 1 Comment »

По умолчанию при изменении размеров полупрозраных (и прозрачных) картинок вместо прозрачного фона получается заливка цветом. Это негативно сказывается на внешнем виде изображения и нервах. Поэтому я расскажу, как сохранять прозрачность.
Итак, для этого нам понадобятся следующие функции:

  • imagecolorallocatealpha
    int imagecolorallocatealpha ( resource $image, int $red, int $green, int $blue, int $alpha)
  • imagealphablending
    bool imagealphablending ( resource $image, bool $blendmode)
  • imagesavealpha
    bool imagesavealpha ( resource $image, bool $saveflag)

Код в результате выглядит примерно так:

PHP:
  1. $imgInfo = getimagesize($img);
  2. $im = imagecreatefrompng($img);
  3. $newImg = imagecreatetruecolor($nWidth, $nHeight);
  4. imagealphablending($newImg, false);
  5. imagesavealpha($newImg,true);
  6. $transparent = imagecolorallocatealpha($newImg, 255, 255, 255, 127);
  7. imagefilledrectangle($newImg, 0, 0, $nWidth, $nHeight, $transparent);
  8. imagecopyresampled($newImg, $im, 0, 0, 0, 0, $nWidth, $nHeight, $imgInfo[0], $imgInfo[1]);

Так что мою старую функцию можно доработать так, чтобы она сохраняла прозрачность картинок. Заодно и тип файла можно проверять не по расширению, а по тому, что вернет getimagesize (исходя из приведенного выше примера - это элемент $imgInfo[2]).

Постовой: Даже ребенок знает, что сделать сайт недостаточно, надо еще и найти качественный хостинг.

Вставка видео с YouTube в высоком качестве. Плюс список видов видео.

Monday, January 12th, 2009 | HTML, Web | 3 Comments »

По умолчанию код для вставки видео, который предлагает YouTube, дает видео в низком (точнее, обычном) качестве.
Для того, чтобы вставить видео высокого качества нужно добавить в адрес записи "&ap=%2526fmt%3D18" (без кавычек). Обратите внимание, что в коде вставки адрес встречается дважды.

Например:

HTML:
  1. <object width="480" height="295">
  2.   <param name="movie" value="http://www.youtube.com/v/S1ZZreXEqSY&hl=en&fs=1&ap=%2526fmt%3D18"></param>
  3.   <param name="allowFullScreen" value="true"></param>
  4.   <param name="allowscriptaccess" value="always"></param>
  5.   <embed src="http://www.youtube.com/v/S1ZZreXEqSY&hl=en&fs=1&ap=%2526fmt%3D18" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"></embed>
  6. </object>

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

Вообще, помимо варианта по умолчанию, доступны следующие виды качества видео (т.е. значения параметра fmt):

  • 6 - HQ flv (480 x 360, 30fps, 900KBps video Flash Sorenson, 44.1KHz 96 kbps Mono CBR audio MP3)
  • 18 - mp4 (480 x 360, 24fps, 512KBps video h.264, 44.1KHz 128 kbps Stereo audio AAC)
  • 22 - HD (1280 x 720, 30fps, 2000kbps video AVC, 232kbps audio AAC, 44.1khz stereo)

Эти параметры можно использовать и в ссылках на видео. Например: http://www.youtube.com/watch?v=S1ZZreXEqSY&fmt=18

Постовой: Активная продажа квартир в одессе дала кое-кому хороший дополнительный заработок. Особенно в условиях, когда работа в Одессе не радует.

Восстановление удаленных записей в mySQL из binlog

Monday, January 12th, 2009 | Linux, SQL, Shell | No Comments »

Вчера я случайно удалил почти все записи из таблицы статистики просмотра видеозаписей Движущихся Картинок. Событие более чем печальное. До этого я предполагал, что восстановить удаленные записи практически невозможно. Оказалось, что можно. Если включены бинарные логи (для их включения в настройках mySQL надо указать параметр log-bin).
В результате некоторых раздумий получилась команда:
/usr/bin/mysqlbinlog --database=нужная_база_данных --start-datetime="2008-01-01 00:00:00" путь_ко_всем_binlog | tr "\t" " " | tr "\n" " " | tr ";""\n" | grep "INSERT INTO \`побитая_таблица\`" > p.sql

Параметр start-datetime содержит в себе дату, с которой вынимаем логи. Можно еще указать время остановки (в моем случае это было неактуально).
Далее нужно указать не просто путь к логам, а все файлы логов (например, /var/lib/mysql/lalala-bin.*).
Несколько tr'ов нужны потому, что запрос мой был многострочным, а надо было мне получать один запрос в одну строку.

В конечном счете в файле p.sql я получил нужные мне запросы. Единственное, что в конце строк не было точки с запятой. Это было исправное просто:
cat p.sql | sed "s/\"\)/\"\);/g" > p2.sq
Просто у меня каждый запрос оканчивался на ....")

Когда я попытался скормить запросы mySQL'у оказалось, что из-за того, что были удалены не все записи, начались проблемы с уникальностью некоторых полей. Чтобы не копаться в дампе руками, сделал так:
cat p2.sql | sed "s/INSERT INTO/INSERT IGNORE INTO/g" > p3.sql

И уже p3.sql успешно скормил mySQL'у.

Отсюда выводы: во первых, всегда делайте бекапы (как можно чаще), и во вторых всегда включайте логирование.

P.S. Конечно же из binlog'ов можно вытащить все, что делалось с базой. И Восстановить то состояние, которое нужно.

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

Заключаем в таги выделенный в textarea текст

Tuesday, December 23rd, 2008 | JavaScript | 2 Comments »

В продолжение вчерашних манипуляций с текстом понадобилось вставлять в textarea таги. Причем не просто вставлять, а "брать" в таги выделенный текст. Соответствующая функция приведена ниже.

JAVASCRIPT:
  1. function insertTag(elem, tagstart, tagend) {
  2.   // Mozilla и другие вменяемые браузеры
  3.   if (elem.setSelectionRange) {
  4.     elem.value = elem.value.substring(0, elem.selectionStart) +
  5.                   tagstart +
  6.                   elem.value.substring(elem.selectionStart, elem.selectionEnd) +
  7.                   tagend +
  8.                   elem.value.substring(elem.selectionEnd, elem.value.length);
  9.   }
  10.   // MSIE
  11.   else {
  12.     var selectedText = document.selection.createRange().text;
  13.     if (selectedText != "") {
  14.       var newText = tagstart + selectedText + tagend;
  15.       document.selection.createRange().text = newText;
  16.     }
  17.   }
  18. } // insertTag

Постовой: Пройди iq тест узнай, на сколько ты умен! Если что - поможет лечение алкоголизма и частная наркологическая клиника одесса.

Вставляем в textarea текст туда, где находится курсор

Monday, December 22nd, 2008 | JavaScript | 7 Comments »

Только что наткнулся на необходимость с помощью JavaScript вставлять текст в textarea в то место, где сейчас находится курсор. Получилась нижеприведенная функция. Параметров у нее два - поле, куда вставлять, и текст, который вставлять.

JAVASCRIPT:
  1. function insertAtCursor(myField, myValue) {
  2.   //  Для MSIE
  3.   if (document.selection) {
  4.     myField.focus();
  5.     sel = document.selection.createRange();
  6.     sel.text = myValue;
  7.   }
  8.   // Для нормальных браузеров
  9.   else if (myField.selectionStart || myField.selectionStart == '0') {
  10.     var startPos = myField.selectionStart;
  11.     var endPos = myField.selectionEnd;
  12.     myField.value = myField.value.substring(0, startPos) + myValue + myField.value.substring(endPos, myField.value.length);
  13.   }
  14.   // Для остальных ;)
  15.   else {
  16.     myField.value += myValue;
  17.   }
  18. } // insertAtCursor

Постовой: Правильная seo поисковая оптимизация - это залог процветания сайта. Кроме того, любому web-программисту рано или поздно понадобится web дизайн. Ну и чай, конечно ;).
 Страница: 1 (всего: 10)  1  2  3  4  5 » ...  Последняя »