PHP: Как със сървърен софтуер да растеризираме векторни графики
Posted by: Nick in ПрограмиранеНаскоро ми се наложи да мисля начин как в уебстраница при upload на векторна графика автоматично да й се създава растерен вариант (PNG). На пръв поглед има една камара конзолен софтуер за целта, но при всеки имаше проблеми.
Едното изискване при растеризирането е когато оригиналният вектор е с прозрачен фон, и PNG-то да е прозрачно. Другото изискване е да се спази пропорцията на изображението. Та ей тези две неща все бяха проблемни.
Първо мъчих с convert (ImageMagick) – според документацията му трябва безпроблемно да се справя с растеризиране на EPS и AI формати (посредством ghostscript), което за съжаление не беше така – не се запазваше прозрачността. След дълго главоблъскане установих, че всъщност convert подава грешен параметър “sDEVICE” към ghostscript (“pnmraw” вместо “pngalpha”). Очевидно решението беше да работя директно с ghostscript без да минавам през convert. Това пък ме затрудняваше, щото нямаше как да задам коректно размерите в пиксели, в които искам растерния файл. Наложи се всеки път чрез identify (ImageMagick) да взимам резолюцията на изображението, за да изчисля пропорцията. С това проблемът с EPS форматът беше решен (AI така и не успях да подкарам, и аз не знам защо).
Паралелно с това, исках чрез inkscape да правя същото със SVG и SVGZ файлове. За съжаление се оказа, че наистина трябва да правя същото (проблемът със запазването на пропорцията). Тук обаче identify не можеше да помогне с намирането на резолюцията и трябваше сам да прочитам първите еди-колко-си реда от файла, за да намеря пропорцията.
И тъй като наистина ми беше много зор докато стигна до някакъв задоволителен работещ вариант, мисля да го споделя…





Entries (RSS)