Created
August 22, 2014 23:05
-
-
Save enapupe/0d61d9910e73c0b0d016 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
function clean_da_svg($svg){ | |
$remover[] = 'xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"'; | |
$remover[] = 'xmlns:xlink="http://www.w3.org/1999/xlink"'; | |
$remover[] = 'x="0px" y="0px"'; | |
$remover[] = '<defs></defs>'; | |
$remover[] = 'version="1.1"'; | |
$remover[] = "\r"; | |
$remover[] = "\n"; | |
$remover[] = "\r\n"; | |
$remover[] = "\n\r"; | |
$remover[] = "\r\r"; | |
$remover[] = "\n\n"; | |
$remover[] = "\r\n\r\n"; | |
$remover[] = PHP_EOL; | |
$str = (string) str_replace($remover, '', $svg); | |
$str = trim(preg_replace('/\s+/', ' ', $str)); | |
$str = substr($str, 255); | |
$str = str_replace('<defs></defs>', '', $str); | |
return $str; | |
} | |
$selectors = array(); //array que vai conter todas os seletores(imagens) | |
$css_rules = array(); //array que vai conter uma declaracao pra cada imagem | |
$pre_selector = "."; //por exemplo: .icon ou #teste .icons | |
$folder = "sprite/xtra/"; //pasta pra procurar os arquivos | |
$files = glob($folder.'*.{gif,jpg,png,svg}', GLOB_BRACE); //arquivos possiveis | |
foreach($files as $file) { | |
$file_info = pathinfo($file); | |
if($file_info['extension'] == "svg"){ | |
$mime_type = 'svg+xml'; | |
$xml = simplexml_load_file($file); | |
$attr = $xml->attributes(); | |
$size['width'] = $attr->width; | |
$size['height'] = $attr->height; | |
$base64 = str_replace("%2F", "/", rawurlencode(clean_da_svg(file_get_contents($file)))); | |
$encode = 'charset=US-ASCII'; | |
} else { | |
$size_tmp = getimagesize($file); | |
$mime_type = $file_info['extension']; | |
$size['width'] = $size_tmp[0]."px"; | |
$size['height'] = $size_tmp[1]."px"; | |
$base64 = base64_encode(file_get_contents($file)); | |
$encode = 'base64'; | |
} | |
$css_selector = $pre_selector.$file_info['extension'].'-'.$file_info['filename'];//css selector com a possibilidade de um pre-seletor | |
if($file_info['extension'] == "svg")//se não for SVG não precisa background-size nem no-repeat | |
$selectors[] = $css_selector; | |
if(!strpos($css_selector, "-repeat")) { | |
$css_rules[]= $css_selector. " {width:".$size['width'].";height:".$size['height'].";background-image:url('data:image/$mime_type;$encode,".$base64."');}"; | |
} else { | |
$css_rules[]= $css_selector. " {background-repeat:repeat;background-image:url('data:image/$mime_type;$encode,".$base64."');}"; | |
} | |
} | |
if(count($selectors))//se não tiver svg não imprime | |
echo implode(",", $selectors) . "{background-size:100%;background-repeat:no-repeat;display:block}".PHP_EOL; | |
foreach($css_rules as $css){ | |
echo $css .PHP_EOL; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment