Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
  • Данный раздел создан исключительно для релизов! Вопросы по лаунчеру или обвязке задавайте ТОЛЬКО в соответсвующей теме автора. Любые другие темы будут удалены, а авторы понесут наказание.

Веб Мини-скриптик для иконок.

Лайк поставите?;3

blogger2

Старожил
Пользователь
Баллы
123
Имя в Minecraft
XuPoH
Всем хаюшки, по совету @Semen4ik решил что-то сделать в паблик для этого форума.
Ладно, вру, самому понадобилось, теперь уже не надо, решил это выложить.
Не суть важно, вот в чём фишка:
К примеру, у вас есть файл с иконками (png/jpg/gif/bmp, не важно).
Вам нужно вытащить 61 по счету. Известны размеры этих иконок. Просто берем, и вытаскиваем сразу эту иконку по трем методам!
Вот класс:
PHP:
<?php
class IconHelper{
    private $img;
    private $arr;
    public function __construct($filepath){
        $this->img = $filepath;
    }
    public function numFromOne($arr){
        $i = 1;
        $array = array();
        foreach($arr as $index=>$value){
            $array[$i] = $value;
            $i++;
        }
        return $array;
    }
    public function getExtention($filename) {
        return substr(strrchr($fileName, '.'), 1);
    }
    public function parseAsImage($id,$size=32){
       
        switch($this->getExtention($this->img)){
            case "png":
                $src = imagecreatefrompng($this->img);
            break;
            case "gif":
                $src = imagecreatefromgif($this->img);
            break;
            case "jpg":
                $src = imagecreatefromjpeg($this->img);
            break;
            case "jpeg":
                $src = imagecreatefromjpeg($this->img);
            break;
            default:
            $src = imagecreatefrompng($this->img);
            break;
        }
       
        list($width, $height) = getimagesize($this->img);
       
        $dest = imagecreatetruecolor($size, $size);
        imagesavealpha($dest, true);
        $color = imagecolorallocatealpha($dest, 0, 0, 0, 127);
        imagefill($dest, 0, 0, $color);

        // Копирование
        $count_x = floor($width / $size);
        $count_y = floor($height / $size);               
        $count = $count_x * $count_y;
        $array = array();
        $i = 1;
        for($line = 0; $line < $count_y; $line++){                                       
            for($left = 0; $left < $count_x; $left++){
                $array[$i] = $left*$size . '<::>' . $line*$size;
                $i++;
            }
        }   

        list($x,$y) = explode('<::>', $array[$id]);
       
        imagecopy($dest, $src, 0, 0, $x, $y, $size, $size);
       
        // Вывод и освобождение памяти
        header('Content-Type: image/png');
        imagepng($dest);
        imagealphablending($dest, true);        
        imagesavealpha($dest, true);
        imagepng($dest, null, 10);

        imagedestroy($dest);
        imagedestroy($src);
    }
    public function parseIcons($size=32, $return_as="array"){                   
        $file = $this->img;                       
        $dimension = getimagesize($file);
        $main_css = "display: inline-block; width: {$size}px; height: {$size}px; background: url('{$file}'); margin-bottom: -8px;";                       
        $width =  $dimension[0];
        $height = $dimension[1];                   
        $count_x = floor($width / $size);
        $count_y = floor($height / $size);               
        $count = $count_x * $count_y;                       
        $return = "";           
        for($line = 0; $line < $count_y; $line++){                                       
            for($left = 0; $left < $count_x; $left++){
                $return .= "<span style=\"{$main_css}background-position: ".$left*$size."px ".$line*$size."px;\"></span>|";
            }
        }                       
        $arr = $this->numFromOne( array_slice(explode("|", $return), 0, $count) );                       
        $this->arr = $arr;                   
        $this->col = $count;
        return ($return_as == "array") ? (array) $this->arr : (string) str_replace("|", null, $return);
    }
    public function getById($id){
        if(empty($this->arr) || !is_array($this->arr)){ return false; }                       
        return $this->arr[$id];
    }
    public function getNum(){
        return (empty($this->col)) ? false : $this->col;
    }
}
Вот пример:
PHP:
<?php
include("class.php"); //подключаем файл с моим классом
$ih = new IconHelper("images/icon.png"); //путь до иконок
$array = $ih->parseIcons(32); //32 - размер иконки
print_r($array); //вот и наш массив! Делаем, что душе угодно!
//После вызова parseIcons можно юзать ещё две плюшки:
echo "Всего иконок: " . $ih->getNum();
echo "<br>Иконка под номером 3:". $ih->getById(3);
?>

UPD!!!! Можно сразу брать картинкой!!!!
Создаём файл icon.php
Внутри пишем:
PHP:
<?php
ini_set("display_errors", false);//т.к. хеадер стоит
include("iconhelper.php");//подключаем класс
$icon = (int) trim($_GET['id']);    //параметр ID
$ih = new IconHelper('images/icons.png');    //открываем иконки           
$ih->parseAsImage($icon);//выводим картинкой c:
?>
 
Последнее редактирование:
Во время, как раз со старых текстур паков вырезать собрался. Имперский лойс!
 
А самому никак?)) Довольствуйся тем, что дали, а не выёживайся. JS не кроссбраузерен, во первых. Во вторых, ты каким хреном будешь получать размер картинки? Сторонними либами вроде jQuery? $("body").append("<img src='"+src+"' width='auto' height='auto' style='display:none;'/>Лал.
UP! Сделал функцию, через которую можно получать СРАЗУ прозрачной иконкой!!!
:D если увижу в темах со значком "веб" и ты что-то подобное напишешь как Cyber Owl я тебя транклюкирую нахрен!
 
Во вторых, ты каким хреном будешь получать размер картинки?
Записываете в переменную * картинку, даёте понять, что это изображение + абсолютный путь
затем вызываешь *.width, *.height.
А самому никак?)) Довольствуйся тем, что дали, а не выёживайся.
Мне это не сложно, но делать реализацию такого простого действия на php...
JS не кроссбраузерен, во первых.
Что Вы несёте?
 
Не Bootstrap, а Glyphicons, Font Awesome.
слушай, не придерайся.
в bootstrap 2 свои иконки были
у gi и fa шрифтом идут иконки.
_____________________________________
upd до меня дошло xD
полезный скрипт
но лучше его применять для генерации css файла.
ибо php не оч быстро работает (такое на js надо)
 
Последнее редактирование:
в bootstrap 2 свои иконки были
Чушь не надо нести.
1399756962-clip-42kb.png
 
Да, возможно.
Но это чтобы вручную не просчитывать background-position, для тех кто ещё не понял.
Поставьте лайк за работу, не устраивайте обсёр c:
Ни*** себе я говнокодил..
 
Да, возможно.
Но это чтобы вручную не просчитывать background-position, для тех кто ещё не понял.
Поставьте лайк за работу, не устраивайте обсёр c:
Ни*** себе я говнокодил..
Некропостер D:
 

Поделиться этой страницей

Назад
Верх