2017-11-24 246 views
7

Kullanarak, kullanıcının orada kartvizit oluşturabileceği kumaş js kullanarak bir tuval oluşturdum. Şimdi ölçeklenebilir/yazdırılabilir görüntü (SVG & PNG) oluşturmak için mücadele ediyorum.Sunucu tarafında (PHP) SVG ve PNG görüntüsü nasıl oluşturulur? Kumaş js

toSVG kumaş verileri kullanılarak sunucu tarafında SVG ve PNG görüntüsü oluşturmanın birkaç yolunu deniyorum. Böylece, kullanıcı o kartı basmak için SVG'yi kullanabilir.

(tüm bağlantıları i uygun bir yol bulmak istedi SO benim sorulara atıfta aşağıda) Ben seçeneklerinin altında çalıştık

:
1) Generate SVG on php side using Canvas JSON
Yok Başarı
2) Using raw svg data generate png on server side
Kısmi Başarı: Word sarma, Yazı Tipi Sorunu vb. Konularla ilgili sorunların yanı sıra, yazdırılabilir resim de alınamıyor. (DPI sonra konu ekli SS gibi görünen yüksek kullanılıyorsa) SS aşağıda kontrol edin:

enter image description here

3) Generate Printable PDF using SVG raw data
Kısmi: yazdırılabilir PDF

4) generate svg using raw data of svg in imagick
elde edebilmek değil Hayır Başarı: svg görüntü (BG sorunu, görüntü sorunu) oluşturmak mümkün değil.

5) Doğrudan ham verileri

kullanılarak SVG oluşturmak
$file_name = uniqid($prefix).".svg"; 
$file_handle = fopen("$folder_name/".$file_name, 'w'); 
fwrite($file_handle, $raw_svg); 
fclose($file_handle); 

YOK Başarı: Yazı yüklenmiyor, ölçeklenebilir Değil (yazdırılabilir kalite)

Benim soru için en iyi yol budur demektir BG Görüntü, Yüklenen Görüntüler, farklı kılan SVG & PNG oluşturmak. yazdırılabilir kalitede yazı tipleri vb.

Not: Daha çok, SVG'ye odaklanıyorum çünkü müşteri, PNG içinde yazdırılabilir nitelikler elde edebilmek için çalışabiliyorsa bunu tercih ediyor. Ayrıca PNG ile PNG sohbete ulaşmak için imagick'i kullandım. Ancak basılabilir kalite elde edilemiyor (SS'nin üzerinde olduğu gibi daha yüksek DPI sorununda).

+0

Tüm araştırmalarımı ve şimdiye kadar denediğimi dahil etmeye çalıştım. Yani herhangi bir alternatif varsa lütfen bana bildirin. imagemagick veya herhangi bir yönteme alternatif gibi. Böylece istediğim çıktıyı elde edebilirim. – DS9

+1

SVG yeteneklerinden emin değilim, ancak sunucuda PhantomJS'yi kullanabilirsiniz. Temelde kullanıcının tarayıcısı gibi şeyler işleyebilecek başsız bir WebKit tarayıcısıdır. Ve sonra bunu bir görüntü (PNG) yanı sıra bir PDF'ye dönüştürebilirsiniz. Ayrıca daha fazla olasılık açabilecek kendi JS Kodunuzu da çalıştırabilirsiniz. Belki bu bir seçenek? Hala shell_exec ve benzeri kullanarak PHP'ye entegre olabilirsiniz. – matths

+1

Gerçek toSVG verileriyle ilgili sorun nedir? gerçek bir SVG. SVG'yi PNG'lere dönüştürmek için imagemagick iyi değil mi? – AndreaBogazzi

cevap

1

Nesneleri işlemenin en güvenilir yolu, IMHO, webjet'in farklı yazı tiplerini kullanarak, giriş web içeriğinden yazdırılabilir kalitede PDF dosyaları oluşturmak için wkhtmltopdf'u kullanmayı düşünmektedir.

İkili kopyalayıp sunucunuza yapıştırarak yükleyebilirsiniz.

Önceden gelir ve popüler dağıtımlar için ikili dosyaları karşıdan yükler. Böyle Geçiş kullanarak php den wkhtmltopdf çağırabilir

:

Bu tarayıcı üzerinde kurulabilir, bu örneğe bakın

echo("<pre>"); 
passthru("/full/path/to/your/wkhtmltopdf input_html_with_svg_inside.html output.pdf 1>&2"); 
echo("</pre>"); 

Daha sonra, dönüştürmek imagemagick paketinden convert kullanabilirsiniz örneğin şeffaf bir png için.

Ayrıca, yazı tiplerini sunucuya yükleyin, her zaman tüm yazı tiplerini doğru alamazsınız, ancak ücretsiz olarak yükleyebileceğiniz yazı tipi paketlerini çevrimiçi olarak bulabilirsiniz. da wkhtmltopng var.

HTH.