SVG Linear Gradient-Skala und Übersetzung Frage
-
12-09-2019 - |
Frage
Ich habe folgende radiale Gradienten:
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2454"
id="radialGradient2460"
cx="4022.8572"
cy="5451.2656"
fx="4022.8572"
fy="5451.2656"
r="3559.865"
gradientTransform="matrix(-0.1071067,-0.1166362,0.1377765,-7.0459663e-2,276.61943,1452.439)"
gradientUnits="userSpaceOnUse" />
Ich mag um 90% dieses Gradienten in der Größe reduzieren und übersetze es auf diesen neuen Maßstab in geeigneter Weise auf Basis (x Position 402.2, y-Position wird wird 545,1, etc).
Offensichtlich cx multipliziert, cy, fx, fy, und r von 0,1 erhalten mich Teil dort des Weges. Wie aber programmatisch nacharbeiten ich die gradientTransform den Rest des Weges zu bekommen?
Lösung
Ich würde die Parameter (cx, fx, r usw.) unberührt lassen. Gerade multiplizieren, um die bestehende Transformationsmatrix mit einer neuen Matrix für die Skalierung. Die resultierende Matrix ist die neue Transformationsmatrix für Farbverlauf.
Wenn Sie das Zentrum maßstab um wollen, dann haben Sie auch eine Übersetzung in der Skalierungsmatrix hinzuzufügen.
So dies für Skalierungsfaktor sein würde, s = 0,1:
newGradientTansform =
oldGradienTransform * matrix(s, 0, 0, s, -cx*(s-1), -cy*(s-1))