2016-08-24 3 views
0

В основном то, что у меня есть, является SVG-файлом, который создает вертикальные линии тени под углом 45 градусов, это дает приятный эффект на фоне веб-страницы с линейным градиентом на тех же 45 градусах. Однако я хочу добавить изображение в файл SVG, чтобы между двумя из 6 строк, созданных SVG, было изображение.Добавление изображения JPEG в векторный SVG

Я сначала попытался просто поместить его туда, где находится SVG, используя CSS, но это на самом деле не получилось, поэтому я попытался найти, как добавить не векторные изображения в векторный SVG, но как этот вопрос вероятно, показывает, что я мало понимаю, как работают файлы SVG.

Ниже приведен код текущего SVG-файла, который я использую. Я также добавил картинку, чтобы показать, как я хочу, чтобы она выглядела.

Не уверен, если это имеет значение, но я знаю, что изображение, которое я хочу добавить, не является вектором, но поскольку изображение, которое я добавлю, очень, очень велико, я довольно уверен, что большинство зрителей моего веб-страница будет видеть его меньше, чем оригинальный размер, который должен поддерживать качество a-ok.

Если кто-то захочет взглянуть на это и хочет помочь мне найти решение для моей проблемы, это было бы высоко оценено. Спасибо!

Example of what I want the end result to look like

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1000px" height="1000px" viewBox="0 0 1000 1000" zoomAndPan="disable"> 
 
    <style type="text/css"><![CDATA[ 
 
\t \t .p-4 { fill: rgba(255,255,255,0.16); } 
 
\t \t .p-3 { fill: rgba(255,255,255,0.12); } 
 
\t \t .p-2 { fill: rgba(255,255,255,0.08); } 
 
\t \t .p-1 { fill: rgba(255,255,255,0.04); } 
 
\t \t .p0 { fill: none; } 
 
\t \t .p1 { fill: rgba(0,0,0,0.025); } 
 
\t \t .p2 { fill: rgba(0,0,0,0.05); } 
 
\t \t .p3 { fill: rgba(0,0,0,0.075); } 
 
\t \t .p4 { fill: rgba(0,0,0,0.1); } 
 
    ]]></style> 
 
\t <polygon class="p-4" points="-1125,0 -375,1000 125,1000 -875,0" /> 
 
\t <polygon class="p-3" points="-875,0 125,1000 375,1000 -625,0" /> 
 
\t <polygon class="p-2" points="-625,0 375,1000 625,1000 -375,0" /> 
 
\t <polygon class="p-1" points="-375,0 625,1000 875,1000 -125,0" /> 
 
\t <polygon class="p0" points="-125,0 875,1000 1125,1000 125,0" /> 
 
\t <polygon class="p1" points="125,0 1125,1000 1375,1000 375,0" /> 
 
\t <polygon class="p2" points="375,0 1375,1000 1625,1000 625,0" /> 
 
\t <polygon class="p3" points="625,0 1625,1000 1875,1000 875,0" /> 
 
\t <polygon class="p4" points="875,0 1875,1000 2125,1000 1125,0" /> 
 
</svg>

ОБНОВЛЕНО SVG-ФАЙЛ:

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1000px" height="1000px" viewBox="0 0 1000 1000" zoomAndPan="disable"> 
 
    <style type="text/css"><![CDATA[ 
 
\t \t .p-4 { fill: rgba(255,255,255,0.16); } 
 
\t \t .p-3 { fill: rgba(255,255,255,0.12); } 
 
\t \t .p-2 { fill: rgba(255,255,255,0.08); } 
 
\t \t .p-1 { fill: rgba(255,255,255,0.04); } 
 
\t \t .p0 { fill: none; } 
 
\t \t .p1 { fill: rgba(0,0,0,0.025); } 
 
\t \t .p2 { fill: rgba(0,0,0,0.05); } 
 
\t \t .p3 { fill: rgba(0,0,0,0.075); } 
 
\t \t .p4 { fill: rgba(0,0,0,0.1); } 
 
    ]]></style> 
 
\t <polygon class="p-4" points="-1125,0 -375,1000 125,1000 -875,0" /> 
 
\t <polygon class="p-3" points="-875,0 125,1000 375,1000 -625,0" /> 
 
\t <polygon class="p-2" points="-625,0 375,1000 625,1000 -375,0" /> 
 
\t <polygon class="p-1" points="-375,0 625,1000 875,1000 -125,0" /> 
 
\t <polygon class="p0" points="-125,0 875,1000 1125,1000 125,0" /> 
 
\t <polygon class="p1" points="125,0 1125,1000 1375,1000 375,0" /> 
 
\t <polygon class="p2" points="375,0 1375,1000 1625,1000 625,0" /> 
 
\t <polygon class="p3" points="625,0 1625,1000 1875,1000 875,0" /> 
 
\t <polygon class="p4" points="875,0 1875,1000 2125,1000 1125,0" /> 
 
\t <image x="20" y="20" width="477" height="640" 
 
    xlink:href=../../../images/my_image.png"" /> 
 
</svg>

+0

http://tutorials.jenkov.com/svg/image-element.html –

+0

@Paulie_D Благодаря человеку, который был на самом деле именно то, что я был после. Довольно полезный материал. Мне удалось добавить изображение в SVG-файл, но я не понимаю, как я могу заблокировать его с помощью полигонов, чтобы он оставался того же размера при масштабировании или выходе (мой веб-дизайн реагирует, поэтому важно, чтобы изображение Я добавил, что SVG остается того же размера при масштабировании или выходе, так как остальная часть SVG тоже делает это). – Narc

+0

Он должен сохранять свое положение относительно других элементов в SVG. Отправьте обновленный SVG, чтобы мы могли видеть, что вы сделали. –

ответ

0

Вы можете добавить clipPath как многоугольник, где вы хотите, чтобы изображение отображалось.

например, для p2:

<defs> 
<clipPath id="polygon_p2_mask"> 
<polygon points="375,0 1375,1000 1625,1000 625,0" /> 
</clipPath> 
</defs> 

Затем на вашем изображении:

<image clip-path="url(#polygon_p2_mask)" .... /> 

Примечание: тогда не требуется полигон класса = "p2"

0

Вы можете превратить один из ваших полигонов в обтравочный контур, чтобы ограничить ваше изображение одним «срезом».

Примечание некоторые из других вещей, которые я сделал в примере ниже:

  1. Я удалил width и height атрибуты из <svg> тега. Теперь это означает, что SVG масштабируется, чтобы соответствовать странице (или ее родительскому элементу). Вместо того, чтобы фиксироваться размером 1000х1000. Смотри ниже.

  2. У меня установлено изображение preserveAspectRatio="xMidYMid slice". Это эквивалентно backrgound-size: cover элементам HTML. Он гарантирует, что изображение заполняет весь размер изображения 1000x1000 без каких-либо зазоров по краям.

Наконец, я хочу отметить, что ваши первые четыре ломтика белые с различными уровнями непрозрачности.Это было предназначено? На белом фоне они не появятся (белый на белом).

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1000 1000" zoomAndPan="disable"> 
 
    <style type="text/css"><![CDATA[ 
 
\t \t .p-4 { fill: rgba(255,255,255,0.16); } 
 
\t \t .p-3 { fill: rgba(255,255,255,0.12); } 
 
\t \t .p-2 { fill: rgba(255,255,255,0.08); } 
 
\t \t .p-1 { fill: rgba(255,255,255,0.04); } 
 
\t \t .p0 { fill: none; } 
 
\t \t .p1 { fill: rgba(0,0,0,0.025); } 
 
\t \t .p2 { fill: rgba(0,0,0,0.05); } 
 
\t \t .p3 { fill: rgba(0,0,0,0.075); } 
 
\t \t .p4 { fill: rgba(0,0,0,0.1); } 
 
    ]]></style> 
 
    <defs> 
 
    <clipPath id="p1-clip"> 
 
     <polygon points="125,0 1125,1000 1375,1000 375,0"/> 
 
    </clipPath> 
 
    </defs> 
 
\t <polygon class="p-4" points="-1125,0 -375,1000 125,1000 -875,0" /> 
 
\t <polygon class="p-3" points="-875,0 125,1000 375,1000 -625,0" /> 
 
\t <polygon class="p-2" points="-625,0 375,1000 625,1000 -375,0" /> 
 
\t <polygon class="p-1" points="-375,0 625,1000 875,1000 -125,0" /> 
 
\t <polygon class="p0" points="-125,0 875,1000 1125,1000 125,0" /> 
 
\t <!-- <polygon class="p1" points="125,0 1125,1000 1375,1000 375,0" /> --> 
 
\t <polygon class="p2" points="375,0 1375,1000 1625,1000 625,0" /> 
 
\t <polygon class="p3" points="625,0 1625,1000 1875,1000 875,0" /> 
 
\t <polygon class="p4" points="875,0 1875,1000 2125,1000 1125,0" /> 
 
\t <image x="0" y="0" width="1000" height="1000" 
 
      preserveAspectRatio="xMidYMid slice" 
 
      xlink:href="http://placekitten.com/640/477" 
 
      clip-path="url(#p1-clip)" /> 
 
</svg>