- Баллы
- 123
- Имя в Minecraft
- XuPoH
Всем хаюшки, по совету @Semen4ik решил что-то сделать в паблик для этого форума.
Ладно, вру, самому понадобилось, теперь уже не надо, решил это выложить.
Не суть важно, вот в чём фишка:
К примеру, у вас есть файл с иконками (png/jpg/gif/bmp, не важно).
Вам нужно вытащить 61 по счету. Известны размеры этих иконок. Просто берем, и вытаскиваем сразу эту иконку по трем методам!
Вот класс:
Вот пример:
UPD!!!! Можно сразу брать картинкой!!!!
Создаём файл icon.php
Внутри пишем:
Ладно, вру, самому понадобилось, теперь уже не надо, решил это выложить.
Не суть важно, вот в чём фишка:
К примеру, у вас есть файл с иконками (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:
?>
Последнее редактирование:
если увижу в темах со значком "веб" и ты что-то подобное напишешь как Cyber Owl я тебя транклюкирую нахрен!