Autor Zpráva
perwin
Profil
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
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
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
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>
Tyto tagy (<svg>, <g>, <image>,...) podle mě ani neexistují...
Prosím vás kdepak je chyba? Děkuji
Chro
Profil
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
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);
?>
Díky za odpovědi :-)

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
- což je ten kód toho souboru..? Co s tím?

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0