Skip to content

Instantly share code, notes, and snippets.

@enapupe
Created August 22, 2014 23:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save enapupe/0d61d9910e73c0b0d016 to your computer and use it in GitHub Desktop.
Save enapupe/0d61d9910e73c0b0d016 to your computer and use it in GitHub Desktop.
<?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