SVG для PNG с несколькими слоями изображения с использованием PHP

Я конвертирую svg в png образ с этим кодом

 <?php exec('/usr/bin/rsvg-convert -w 1000 -h 1000 tshirt.svg -o tshirt.png'); ?> 

Это работает с одним svg-изображением.

На самом деле у меня есть изображение svg которое содержит несколько слоев изображений, таких как:

1-й слой – это изображение футболки фона, которое является прозрачным

Второй слой – это еще одно изображение футболки, которое содержит цвет

3-й слой – это небольшое изображение наклейки, которое должно быть размещено на майке

Мой код svg -:

 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg crossOrigin="anonymous" width="1000px" height="1000px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <g class="canvas_background"> <rect class="canvas_variant_color" width="998" height="998" x="0" y="0" style="" fill="#008080"/> <rect real_size="16,22" height="547" class="canvas_border" width="343" y="160" x="335" fill="#008080" /> </g> <g class="canvas_objects" style="" mask="url('#Sibnip5tjg')"> <g style="display: block;" transform="matrix(1,0,0,1,-146.5,-236.3909)"> <image style="display: block; opacity: 1;" height="175" width="308" y="461" x="501" crossOrigin="anonymous" xlink:href="http://img.ruphp.com/php/unnamed.png"/> </g> </g> <g class="canvas_mockups"> <g class="canvas_styles"> <g class="canvas_style"> <g style="opacity: 1;"> <image xlink:href="http://img.ruphp.com/php/test.png" x="0" y="0" width="1000" height="1000" /> </g> </g> </g> </g> </svg> 

Теперь я хочу, чтобы все слои изображения svg были объединены и сделали одно png изображение.

Прямо сейчас мое преобразованное изображение png показывает только цвет фона. Изображение футболки и наклейки не отображается.

Пожалуйста, установите расширение inkscape .

затем разместите свои изображения (которые вы использовали в svg) в той же папке, где вы сохраните файл svg.

затем измените путь изображения в svg-файле.

  <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg crossOrigin="anonymous" width="1000px" height="1000px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <g class="canvas_background"> <rect class="canvas_variant_color" width="998" height="998" x="0" y="0" style="" fill="#008080"/> <rect real_size="16,22" height="547" class="canvas_border" width="343" y="160" x="335" fill="#008080" /> </g> <g class="canvas_objects" style="" mask="url('#Sibnip5tjg')"> <g style="display: block;" transform="matrix(1,0,0,1,-146.5,-236.3909)"> <image style="display: block; opacity: 1;" height="175" width="308" y="461" x="501" crossOrigin="anonymous" xlink:href="unnamed.png"/> </g> </g> <g class="canvas_mockups"> <g class="canvas_styles"> <g class="canvas_style"> <g style="opacity: 1;"> <image xlink:href="test.png" x="0" y="0" width="1000" height="1000" /> </g> </g> </g> </g> </svg> 

после этого выполните команду inkscape

 exec( 'inkscape --without-gui --export-png=all.png tshirt.svg' ); 

то вы получите файл png в той же папке.

Проблема, которую вы получаете, связана с двумя связанными PNG, которые не разрешаются с этого сайта (хотя они и есть). Например, если вы должны сохранить эти два изображения с «dothejob.in» локально в папке img, а затем просто выбросите их в xlink: href в разметке SVG как img / test.png и img / unnamed.png вместо этого, вы Я найду, что твоя команда отлично работает.

Это также затруднило некоторые другие, и есть несколько различных решений, которые обсуждаются. Просмотрите эту тему в другом месте в stackoverflow для получения дополнительной информации. Как вы решаете это, во многом будет зависеть от того, сколько svgs вы будете работать, насколько быстро вам нужно их обрабатывать и т. Д.