Autor | Zpráva | ||
---|---|---|---|
perwin Profil |
#1 · Zasláno: 21. 2. 2011, 11:57:47
Ahoj,
chtěl bych se zeptat, jak prosím vás funguje PHP script, který převádí rasterové obrázky typu JPG do vektorových typu SVG? Takový převaděč je zde: http://www.enetzwerk.de/svg/index2.html Neznáte prosím taky takový kód? Děkuji |
||
Chro Profil |
#2 · Zasláno: 21. 2. 2011, 13:20:50
SVG je XML formát, JPG obrázek by do něho mohl být vložen převedením do base64 řetězce.
Jednoduchý příklad: <?php $obrazek = 'obrazek.jpg'; list($vyska, $sirka) = getimagesize($obrazek); $jpg = file_get_contents($obrazek); $jpg_base64 = base64_encode($jpg); $svg = '<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20000303 Stylable//EN" "http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-stylable.dtd" [ <!ENTITY st0 "fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;"> ]> <svg width="'.$vyska.'" height="'.$sirka.'" viewBox="0 0 '.$vyska.' '.$sirka.'" xml:space="preserve"> <g id="Ebene_x0020_1" style="&st0;"> <image width="'.$vyska.'" height="'.$sirka.'" xlink:href="data:image/jpeg;base64,'.$jpg_base64.'" transform="matrix(1 0 0 1 0 0)"/> </g> </svg>'; file_put_contents($obrazek.'.svg', $svg): echo '<xmp>'.$svg.'</xmp>'; ?> |
||
Chro Profil |
#3 · Zasláno: 21. 2. 2011, 13:27:46
Koukám, poplantal jsem názvy proměnných $vyska, $sirka. Kód by měl být funkční v podobě jaké je, jde jen o kosmetickou vadu.
|
||
perwin Profil |
#4 · Zasláno: 22. 2. 2011, 15:59:13 · Upravil/a: perwin
Chro:
Zkusil jsem přímo tento kód (až na opravu na 15. řádku), a výsledek, co se mi vypsalo je toto: <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20000303 Stylable//EN" "http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-stylable.dtd" [ <!ENTITY st0 "fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;"> ]> <svg width="36" height="35" viewBox="0 0 36 35" xml:space="preserve"> <g id="Ebene_x0020_1" style="&st0;"> <image width="36" height="35" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAZAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgAIwAkAwERAAIRAQMRAf/EAHQAAQACAgMBAAAAAAAAAAAAAAAICgUGAgMJCwEBAQEBAAAAAAAAAAAAAAAAAAIEAxAAAAYCAQMCBgMAAAAAAAAAAQIDBAUGBwgAYRQJEZET05UWVgohEhURAQACAgMBAQAAAAAAAAAAAAABAhESITEDIjL/2gAMAwEAAhEDEQA/AKgvb9S+3Adv1L7cB2/UvtwHb9S+3Adv1L7cDZO36m9uBao8EWLvHVvZifK2lmx+AsdNdnoyrXCTxpmZszdx14tlFn2zpu8ko14nJJMF8jYhlpIjluIpALmMM3OKSvZPFTcPWb0mLVn5Eor148tGvDd41rLkTdPEWKdpNvLpcLXEYyYz/wDpuomUt8iLmNosDX2beTinhMeVStRKdjn11CpufjOV2gKgqqxTGYvf0vis4qKXjkDOnLhyciSRnC6q5kmzdNs2TMsoZQU27dEpEW6BBN6EIQAKQoAAAABzSOjt+pvbgQB+87h+WWb67K/M4Fxv9WLx62S4XiyeV3ZG62ula66voXI+K3MzZZuFhrrdYesSqWRL7MPBeNVHGM8S1d25Tcj/AFMykpZY6B1DkjX7VTP7X40juR6v+U/FuL/2HvGLA70ePuxXWQzLq9PZXTruPxeO4i12eBh3bYcl4ksdPipF2myyBOV+EhrTVyj8V05bLoNQKAyfqjFJnyvrbqR84c9xuSZjEParQQ5DCQ5DzksUxDFEQMUxRUASmKIeggP8gPNY4/edw/LLN9dlfmcDW+BL5Df/AHaa4FNq2z2nzix1yNW3FOPhOPyFYGGNj1V47Ufvq+pVGbxCKUipF6uoq5RFMSOVFTmVA4nP6zpXO2ORiNeN4dwtSY2zQ+smy+acERFzex0naorGGQLDUY2fkolBy1jpCTYxL1u1cvWrV2omVUS/EFMQKIiBSgCa1t+oyI42KwzdusE7a7LJOZmx2eZlLDPzD04KPJWbmnq8lKyTtQAKB3L585UVUH0D1OYR5Qw3AcBwHAcBwP/Z" transform="matrix(1 0 0 1 0 0)"/> </g> </svg> Prosím vás kdepak je chyba? Děkuji |
||
Chro Profil |
#5 · Zasláno: 22. 2. 2011, 20:16:17
perwin:
Vypsaný zdrojový kód SVG souboru echem je jen pro ilustraci, abys věděl, jakou má formát SVG přibližnou strukturu a jak je do něj JPG obrázek zakomponován. SVG není binární rastrový formát jako např. JPG, ale značkovací vektorový založený na XML. Ty tagy svg, image, g... nepatří k HTML, ale jsou speciálně určeny pro SVG. Kdyby jsi chtěl převést JPG fotku do opravdu, jak to nazvat, korektního (?) SVG, musel bys použít velice hodně tagů, zjednodušeně: co pixel, to tag. Soubor by byl neúměrně datově velký a kód složitý. Proto SVG umožňuje i konstrukci s tagem image a base64 stringem. Ostatně SVG nebyl pro fotografie vyvíjen, je určený pro jednoduchou grafiku jako např. grafy, modely, ikony atd. Ještě před echem máš uložení hotového souboru funkcí file_put_contents do adresáře na serveru. Zkus si ho zobrazit. |
||
perwin Profil |
#6 · Zasláno: 22. 2. 2011, 21:09:37 · Upravil/a: perwin
Chro:
U nového souboru .svg mi Inkscape řekne, že daný soubor je zřejmě poškozený a že nelze zobrazit. Nestačil by tedy jenom tento krátký zápis? <?php $obrazek = 'obrazek.jpg'; $bezkoncovky = $obrazek; $bk = Array('.jpg'=>''); // aby se zrušila koncovka .jpg, potom totiž vznikl soubor obrazek.jpg.svg, což je zbytečné $bezkoncovky = str_replace(array_keys($bk), array_values($bk), $bezkoncovky); $jpg = file_get_contents($obrazek); $jpg_base64 = base64_encode($jpg); $svg = $jpg_base64; file_put_contents($bezkoncovky.'.svg', $svg); ?> EDIT: S tímto kódem obrazek.svg vypadá takto: /9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAZAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgAIwAkAwERAAIRAQMRAf/EAHQAAQACAgMBAAAAAAAAAAAAAAAICgUGAgMJCwEBAQEBAAAAAAAAAAAAAAAAAAIEAxAAAAYCAQMCBgMAAAAAAAAAAQIDBAUGBwgAYRQJEZET05UWVgohEhURAQACAgMBAQAAAAAAAAAAAAABAhESITEDIjL/2gAMAwEAAhEDEQA/AKgvb9S+3Adv1L7cB2/UvtwHb9S+3Adv1L7cDZO36m9uBao8EWLvHVvZifK2lmx+AsdNdnoyrXCTxpmZszdx14tlFn2zpu8ko14nJJMF8jYhlpIjluIpALmMM3OKSvZPFTcPWb0mLVn5Eor148tGvDd41rLkTdPEWKdpNvLpcLXEYyYz/wDpuomUt8iLmNosDX2beTinhMeVStRKdjn11CpufjOV2gKgqqxTGYvf0vis4qKXjkDOnLhyciSRnC6q5kmzdNs2TMsoZQU27dEpEW6BBN6EIQAKQoAAAABzSOjt+pvbgQB+87h+WWb67K/M4Fxv9WLx62S4XiyeV3ZG62ula66voXI+K3MzZZuFhrrdYesSqWRL7MPBeNVHGM8S1d25Tcj/AFMykpZY6B1DkjX7VTP7X40juR6v+U/FuL/2HvGLA70ePuxXWQzLq9PZXTruPxeO4i12eBh3bYcl4ksdPipF2myyBOV+EhrTVyj8V05bLoNQKAyfqjFJnyvrbqR84c9xuSZjEParQQ5DCQ5DzksUxDFEQMUxRUASmKIeggP8gPNY4/edw/LLN9dlfmcDW+BL5Df/AHaa4FNq2z2nzix1yNW3FOPhOPyFYGGNj1V47Ufvq+pVGbxCKUipF6uoq5RFMSOVFTmVA4nP6zpXO2ORiNeN4dwtSY2zQ+smy+acERFzex0naorGGQLDUY2fkolBy1jpCTYxL1u1cvWrV2omVUS/EFMQKIiBSgCa1t+oyI42KwzdusE7a7LJOZmx2eZlLDPzD04KPJWbmnq8lKyTtQAKB3L585UVUH0D1OYR5Qw3AcBwHAcBwP/Z |
||
Časová prodleva: 13 let
|
0