2011-10-20 4 views
5

SVG에서 푸시 핀과 같은 iphone 맵을 다시 만들려고하는데 핀 부분이 아래쪽에 있지만 그림자를 처리하는 방법이 궁금합니다. 그림자 예제를 많이 보았지만 모두 원래 픽셀을 몇 픽셀 씩 상쇄합니다. 변환 행렬을 필터에 적용하여 비뚤어지게 할 수 있습니까?SVG 필터 효과에 변환 행렬을 적용 할 수 있습니까?

여기에 지금까지 핀 SVG입니다 :

<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> 
    <defs> 
     <radialGradient id="SVGID_1_" cx="29.3623" cy="31.1719" r="11.6241" gradientTransform="matrix(1.1875 0 0 1.1875 -30.8438 -30.2812)" gradientUnits="userSpaceOnUse"> 
      <stop offset="0.2637" style="stop-color:#FF0000"/> 
      <stop offset="1" style="stop-color:#6D0000"/> 
     </radialGradient> 
    </defs> 
    <rect x="9.251" y="13.844" fill="#CCCCCC" stroke="#7C7C7C" width="2" height="24.83"/> 
    <circle fill="url(#SVGID_1_)" stroke="#660000" cx="10.5" cy="11.5" r="9.5"/> 
    <ellipse transform="matrix(0.8843 0.4669 -0.4669 0.8843 4.475 -1.6621)" fill="#FFCCCC" cx="6.591" cy="8.199" rx="1.538" ry="1.891"/> 
</svg> 

감사합니다!

+0

+1 큰 질문입니다. – Phrogz

답변

2

여기에는 간단한 변환과 필터가 있습니다. 비뚤어지기를 원할 경우 회전 선을 일부 행렬 재료로 교체해야합니다.

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"> 
    <defs> 
     <radialGradient id="SVGID_1_" cx="29.3623" cy="31.1719" r="11.6241" gradientTransform="matrix(1.1875 0 0 1.1875 -30.8438 -30.2812)" gradientUnits="userSpaceOnUse"> 
      <stop offset="0.2637" style="stop-color:#FF0000"/> 
      <stop offset="1" style="stop-color:#6D0000"/> 
     </radialGradient> 
     <filter id="drop-shadow"> 
      <feGaussianBlur in="SourceAlpha" result="blur-out" stdDeviation="1" /> 

     </filter> 
    </defs> 
    <g id="pin"> 
     <rect x="9.251" y="13.844" fill="#CCCCCC" stroke="#7C7C7C" width="2" height="24.83"/> 
     <circle fill="url(#SVGID_1_)" stroke="#660000" cx="10.5" cy="11.5" r="9.5"/> 
     <ellipse transform="matrix(0.8843 0.4669 -0.4669 0.8843 4.475 -1.6621)" fill="#FFCCCC" cx="6.591" cy="8.199" rx="1.538" ry="1.891"/> 
    </g> 

    <use xlink:href="#pin" transform="rotate(60 10.251 38.674)" filter="url(#drop-shadow)"/> 
</svg> 
+0

완벽한, 감사합니다! – kreek