Как изменить заливку изображения SVG с помощью php? - PullRequest
0 голосов
/ 24 августа 2018

Я сейчас пытаюсь изменить наполнение любого SVG, который вы загружаете с помощью php.Что ж, загрузка работает, однако я не могу найти никакого решения о том, как продублировать SVG (я хочу, чтобы оригинальный SVG остался прежним) и изменить атрибут заполнения с помощью php.У кого-нибудь есть идеи, какую функцию я мог бы использовать?

Вот мой php-код:

<form action="" method="post">
    <p style="color:rgb(19, 107, 129);font-size:16px;margin:11px;">
        SVG-File to re-color:
    </p>
    <input type="file" name="file" />
    <p style="color:rgb(19, 107, 129);font-size:16px;margin:11px;">
        Hex color that it should be:
    </p>
    <input type="text" name="clr" />
    <input type="Submit" style="color:rgb(19, 107, 129);font-size:14px;" value="Send" />

<?php
    if(isset($_POST['file'])){
        $file = $_POST['file'];
    }

    if(isset($_POST['clr'])) {
        $selected_color = $_POST['clr'];
    }

    $svgFile = file_get_contents($file, FILE_USE_INCLUDE_PATH);

    $myXMLData = $svgFile;
    $xml[] = simplexml_load_string($myXMLData) or die("Error: Cannot create object");

    echo print_r($xml);
?>

А вот мой SVG-код:

<svg width="400" height="110">
    <rect width="300" height="100" />
    <a>
        style="fill:rgb(0,0,255);stroke-width:3;stroke:rgb(0,0,0)"
    </a>
</svg>

Это мойВ первый раз, работая с xml, и во второй раз, работая с php, приветствуются любые советы и изменения, которые улучшат код!

Редактировать: вот программа, которая у меня сейчас есть.Он изменяет атрибут заполнения SVG и позволяет пользователю загрузить его.

<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
?>
<form action="" method="post">
<p style="color:rgb(19, 107, 129);font-size:16px;margin:11px;">
    SVG-File to re-color:
</p>
<input type="file" name="file"/>
<p style="color:rgb(19, 107, 129);font-size:16px;margin:11px;">
    Hex color that it should be:
</p>
<input type="text" name="clr"/>
<input type="Submit"
       value="Send"/>
<?php

if (isset($_POST['file'])) {
    $file = $_POST['file'];
}

if (isset($_POST['clr'])) {
    $selectedClr = $_POST['clr'];
}

$svgFile = file_get_contents($file);


$myXMLData = $svgFile;
$xml = simplexml_load_string($myXMLData) or die("Error: Cannot create 
object");
echo print_r($xml);

$FileContents = $svgFile;
$doc = new DOMDocument();
$doc->preserveWhiteSpace = false;
$doc->loadXML($FileContents) or die('Failed to load SVG file ');

$rects = $doc->getElementsByTagName('rect');

foreach($rects as $rect) {
    $rect->setAttribute('style', 'fill: ' . $selectedClr);
}

$finished = fopen("finishedSVG.xml", "w") or die("Unable to open 
file!");

fwrite($finished, $doc->saveXML());
?>

<a href="http://127.0.0.1/Projekte/finishedSVG.xml" download>Download 
Now</a>

Я также изменил SVG, который пытался редактировать, так что не смущайтесь.В любом случае, вот и код:

<svg width="400" height="110" >

    <rect
            width="300"
            height="100"
            style="fill:rgb(111,111,111)"
    />

</svg>

1 Ответ

0 голосов
/ 24 августа 2018

Привет, у меня есть лучшее решение для этого.Вместо того, чтобы создавать свой собственный код, я думаю, что эта библиотека может удовлетворить ваши потребности.Это также поможет организовать ваш код.

Я просто объясню некоторый код, как использовать

use SVG\SVG;  //import
use SVG\Nodes\Shapes\SVGRect; //import

$square = new SVGRect(0, 0, 50, 50);
$square->setStyle('fill', '#CCCCCC');

it's gonna fill this by grey colour

header('Content-Type: image/svg+xml');
echo $square; // it will echo your image

Также для получения более подробной информации посетите Документация .Лучше использовать эту библиотеку.Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...