2012-08-02 5 views
2

Попытка получить эффект полоскания на поверхности круга с заполненным цветом, чтобы шаблон был замаскирован поверх круга. Я не совсем уверен, что я делаю неправильно, но мой код кажется близким к тому, что будет правильно.SVG: Маскирование рисунка на <circle>

<?xml version="1.0" standalone="no"?> 
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 
    <svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="200" width="200"> 
    <defs> 
     <pattern id="stripe" patternUnits="userSpaceOnUse" x="0" y="0" width="10" height="10"> 
     <g > 
      <line x1="10" y1="0" x2="0" y2="10" /> 
     </g> 
     </pattern> 
     <mask id="mask" maskUnits="objectBoundingBox" maskContentUnits="ObjectBoundingBox"> 
     <rect height="300" width="300" style="fill: url(#pinstripe);" /> 
     </mask> 
     <style> 
     g { 
      mask: url(#mask); 
      stroke: black; 
      stroke-width: 1px; 
      stroke-linecap: butt; 
      stroke-rendering: crispEdges; 
     } 
     circle { 
      fill: green; 
     } 
     </style> 
    </defs> 
    <g> 
     <circle cx="100" cy="100" r="100" /> 
    </g> 
    </svg> 

Вы можете посмотреть на this fiddle, чтобы эффективно видеть ничего - на самом деле увидеть круг, удалить mask: url(#mask); стиль.

Так что я не совсем уверен, что не так. Я просто пытаюсь создать круг с зеленым заполнением и белыми полосками сверху. Любая помощь будет серьезно оценена!

+0

Стиль «rect» имеет URL-адрес (#pinstripe), но он, вероятно, должен быть «url (#stripe)» –

+0

Вы правы! Спасибо, но это не совсем исправить. – matt

ответ

3

Думаю, вам нужно исправить свой «белый» и «черный» цвет, потому что это то, что используется в маске.

Вот пример, который работает (вашего кода). Попробуйте переключить «белый» и «черный» цвета в атрибутах «fill» и «stroke».

Вот мой первый пример с "прямоугольником":

<?xml version="1.0" standalone="no"?> 
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="200" width="200"> 
    <defs> 
    <pattern id="pinstripe" patternUnits="userSpaceOnUse" x="0" y="0" width="10" height="10"> 
    <rect x="0" y="0" width="10" height="10" stroke="black" stroke-width="1" fill="white" /> 
    </pattern> 
    <mask id="mask" maskUnits="objectBoundingBox" maskContentUnits="ObjectBoundingBox"> 
     <rect x="0.5" y="0.2" height="300" width="300" style="fill: url(#pinstripe)" /> 
    </mask> 
    <style> 
     g { 
     mask: url(#mask); 
     stroke: black; 
     stroke-width: 1px; 
     stroke-linecap: butt; 
     stroke-rendering: crispEdges; 
     } 
     circle { 
     fill: green; 
     } 
    </style> 
    </defs> 
    <g> 
    <circle cx="100" cy="100" r="100" /> 
    </g> 
</svg> 

EDIT:

Вот другая версия, используя строку (обратите внимание, что я устанавливаю заливки и обводки для «# ffffff "или" white ", чтобы сделать эту маску:

<?xml version="1.0" standalone="no"?> 
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 
    <svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="200" width="200"> 
     <defs> 
     <pattern id="pinstripe" patternUnits="userSpaceOnUse" x="0" y="0" width="10" height="10"> 

      <line x1="10" y1="0" x2="0" y2="10" fill="#ffffff" stroke="#ffffff" /> 
     </pattern> 
     <mask id="mask" maskUnits="objectBoundingBox" maskContentUnits="ObjectBoundingBox"> 
      <rect x="0.5" y="0.2" height="300" width="300" style="fill: url(#pinstripe)" /> 
     </mask> 
     <style> 
      g { 
      mask: url(#mask); 
      stroke: black; 
      stroke-width: 1px; 
      stroke-linecap: butt; 
      stroke-rendering: crispEdges; 
      } 
      circle { 
      fill: green; 
      } 
     </style> 
     </defs> 
     <g> 
     <circle cx="100" cy="100" r="100" /> 
     </g> 
    </svg>​ 
+0

Это замечательно! Большое спасибо за Вашу помощь. к сожалению, я особенно ищу белые полосы на зеленом фоне. То есть - круг все еще заполнен зеленым, но узор будет белыми полосами по нему. – matt

+0

Обновлен мой ответ, чтобы сделать его зеленым с белыми полосками –

+0

Ты потрясающий, и это прекрасно. Большое спасибо за Вашу помощь. Окончательный, слегка связанный вопрос: как я могу сделать так, чтобы ширина штриха шаблона равнялась 2 и между линиями не было разделения? Изображение:! [Stripes] (http://cl.ly/image/1C2B1E0Y1I2B) – matt

Смежные вопросы