2012-10-02 54 views
8

Tôi đang cố gắng thêm đường viền trên hình ảnh PNG mà tôi có (Ví dụ bao gồm). Vấn đề là khi tôi thêm đường viền hiện tại, nó thêm nó vào một hình hộp xung quanh tất cả hình ảnh chứ không phải trên vectơ chính xác (nghĩa là nó bao gồm các phần trong suốt trong hình ảnh).Đường viền CSS trên hình ảnh PNG có các phần trong suốt

Có cách nào có thể để thiết lập cấu hình của đường viền mà nó sẽ không xem xét khu vực trong suốt hay không. (? Thậm chí nếu không muốn nói trong CSS ... Có lẽ HTML5/JS)

Example image

enter image description here

+0

Mặc dù hình ảnh là một png trong suốt, đường viền được áp dụng cho phần tử, mà về cơ bản vẫn là hình vuông xung quanh hình ảnh. Không có một giải pháp đáng buồn, tại sao bạn không thể làm cho biên giới trên hình ảnh actul? – Andy

+0

Bạn có thể minh họa những gì bạn muốn hình ảnh + đường viền trông giống như không? –

+0

Xin chào Jon, tôi đã thêm hình ảnh ví dụ về cách tôi muốn nó hiển thị. – nimi

Trả lời

0

đi qua cần phải làm điều này bản thân mình - đã đưa ra hack này. Một loạt các hình ảnh xếp chồng đằng sau bản gốc của tôi hơi lệch bước với nhau. Ngữ cảnh ctx3 là một bản sao của hình ảnh gốc và điều này sẽ lặp lại một hình bóng màu trắng phía sau nhiều lần ban đầu.

 ctx3.shadowColor = "rgba(255,255,255,1)"; 
     ctx3.globalCompositeOperation = 'source-over'; 
     ctx3.shadowOffsetX = 2; 
     ctx3.shadowOffsetY = 2; 
     ctx3.shadowBlur = 0; 
     ctx3.drawImage(YourImageSource,0,0); 
     ctx3.shadowOffsetX = -2; 
     ctx3.shadowOffsetY = -2; 
     ctx3.shadowBlur = 0; 
     ctx3.drawImage(YourImageSource,0,0); 
     ctx3.shadowOffsetX = -2; 
     ctx3.shadowOffsetY = 2; 
     ctx3.shadowBlur = 0; 
     ctx3.drawImage(YourImageSource,0,0); 
     ctx3.shadowOffsetX = 2; 
     ctx3.shadowOffsetY = -2; 
     ctx3.shadowBlur = 0; 
     ctx3.drawImage(YourImageSource,0,0); 
     ctx3.shadowOffsetX = 0; 
     ctx3.shadowOffsetY = 2; 
     ctx3.shadowBlur = 0; 
     ctx3.drawImage(YourImageSource,0,0); 
     ctx3.shadowOffsetX = 0; 
     ctx3.shadowOffsetY = -2; 
     ctx3.shadowBlur = 0; 
     ctx3.drawImage(YourImageSource,0,0); 
     ctx3.shadowOffsetX = 2; 
     ctx3.shadowOffsetY = 0; 
     ctx3.shadowBlur = 0; 
     ctx3.drawImage(YourImageSource,0,0); 
     ctx3.shadowOffsetX = -2; 
     ctx3.shadowOffsetY = 0; 
     ctx3.shadowBlur = 0; 
     ctx3.drawImage(YourImageSource,0,0); 
25

Tính đến bây giờ (31 tháng 1 2015) có một cách để làm điều đó mà không cần dùng vải, với CSS tinh khiết, và chỉ với 2 dòng mã.

Bí quyết là sử dụng css filter-webkit-filter tính để vẽ hai bóng thả không có mờ, một cho trục dương và một cho tiêu cực, mà sẽ quấn xung quanh hình ảnh, mà sẽ cung cấp (hy vọng) hiệu quả mong muốn.

Lưu ý: bộ lọc css không được hỗ trợ trong IE (hãy hy vọng Spartan hoạt động tốt hơn), đây là compatibility table.

Đoạn đầu tiên này (fiddle) sẽ áp dụng đường biên đơn giản có thể.

img { 
 
    -webkit-filter: drop-shadow(1px 1px 0 black) 
 
        drop-shadow(-1px -1px 0 black); 
 
    filter: drop-shadow(1px 1px 0 black) 
 
      drop-shadow(-1px -1px 0 black); 
 
} 
 

 
body { 
 
    background-color: lightcoral; 
 
}
<img src="http://i.imgur.com/GZoXRjS.png" width="250">

Như bạn có thể thấy, một số hình ảnh (như this awesome baymax render) cần một chút tinh chỉnh nhiều hơn, bạn sẽ nhìn thấy biên giới đúng là một chút nhỏ hơn ở bên trái.

Với ý nghĩ đó, đây là đoạn mã được hoàn thiện (fiddle) chỉ với một tinh chỉnh giá trị thực sự nhỏ.

img { 
 
    -webkit-filter: drop-shadow(2px 1px 0 black) 
 
        drop-shadow(-1px -1px 0 black); 
 
    filter: drop-shadow(2px 1px 0 black) 
 
      drop-shadow(-1px -1px 0 black); 
 
} 
 

 
body { 
 
    background-color: khaki; 
 
}
<img src="http://i.imgur.com/GZoXRjS.png" width="250">

đó phải bao trùm giáp khá tốt, nhưng chúng ta vẫn có thể có nhiều niềm vui hơn với điều này, hãy nhìn tuyệt vời tác nhẹ nhàng này đoạn mã (fiddle).

img{ 
 
    -webkit-filter: drop-shadow(1px 1px 0 black) 
 
        drop-shadow(-1px -1px 0 white); 
 
    filter:drop-shadow(1px 1px 0 black) 
 
      drop-shadow(-1px -1px 0 white); 
 
} 
 

 
body{ 
 
    background-color:lightblue; 
 
}
<img src="http://i.imgur.com/GZoXRjS.png" width="250">

Hy vọng điều này sẽ giúp mọi người tự hỏi về khả năng của một bọc xung quanh biên giới cho hình ảnh bán trong suốt!

+1

Hãy hy vọng giải pháp này biến nó thành thông số kỹ thuật và IE bắt đầu hỗ trợ nó! +1 –

+2

ý tưởng hay, chỉ cần một mẹo, hiệu quả hoạt động tốt hơn một chút khi sử dụng 4 bóng đổ nếu bạn muốn có một cú đánh lớn hơn: bộ lọc: drop-shadow (2px 0px 0 đen) drop-shadow (0px 2px 0 black) drop -shadow (-2px -0px 0 màu đen) đổ bóng (-0px -2px 0 màu đen); –

+0

@AdamCoulombe 'bộ lọc: thả bóng (2px 0px 0 màu đen) thả bóng (0px 2px 0 màu đen) thả bóng (-2px -0px 0 màu đen) thả bóng (-0px -2px 0 màu đen);'. Vui lòng sử dụng mã lần sau :) – haykam

3

Tôi đã mở rộng câu trả lời hàng đầu một chút tốt hơn cho việc sử dụng của tôi.

-webkit-filter: drop-shadow(2px 2px 0 white) 
 
\t \t drop-shadow(-2px 2px 0 white) 
 
\t \t drop-shadow(2px -2px 0 white) 
 
     \t \t drop-shadow(-2px -2px 0 white); 
 

 
\t filter: drop-shadow(2px 2px 0 white) 
 
\t \t drop-shadow(-2px 2px 0 white) 
 
\t \t drop-shadow(2px -2px 0 white) 
 
     \t \t drop-shadow(-2px -2px 0 white);

Nếu ai đó vẫn cần nó.

+0

Vâng, đây chính xác là những gì tôi cần. Cảm ơn bạn đã chia sẻ. – ITWitch

+0

Hãy ghi nhớ điều này lớn hơn 2 pixel mỗi chiều, vì bạn đang đi theo đường chéo. Thực hiện (1, 0), (-1, 0), (0, 1), (0, -1) sẽ dẫn đến hành trình 1 pixel. –

Các vấn đề liên quan