27.06.16 02:20
Canvas Clip Yöntemiyle Maskeleme
Canvas clip yöntemi, belirtilen bir yolu (çizgilerle oluşturulan bir çizim) kullanarak daha sonra oluşturulcak çizimler için bir pencere oluşturur. Sonradan yapılan çizimler, clip ile belirtilen şeklin içinden görünür. Dolayısıyla çizilen şekiller maskelenmiş olur. Kullanımı: ctx.clip();
Örnek: <canvas id="cnTuval" width="200" height="200" style="border:solid 1px red">
Tarayıcınız HTML5 desteklemiyor.
</canvas><br />
<script>
function ciz() {
var tuval = document.getElementById("cnTuval");
var ctx = tuval.getContext("2d");
// clip'den önceki duruma dönebilmek için kapsam durumunu sakla.
ctx.save();
// Bir yıldız çiz.
ctx.beginPath();
ctx.moveTo(100, 52);
ctx.lineTo(116, 84);
ctx.lineTo(150, 88);
ctx.lineTo(126, 114);
ctx.lineTo(130, 150);
ctx.lineTo(100, 132);
ctx.lineTo(70, 150);
ctx.lineTo(76, 114);
ctx.lineTo(50, 90);
ctx.lineTo(84, 84);
ctx.closePath();
ctx.stroke(); // Kullanmak zorunlu değildir. fill de kullanabilirsiniz.
// Çizilen şekli kırpma alanı (pencere) olarak belirle.
ctx.clip();
// Kırmızı bir dörtgen çiz.
ctx.fillStyle = "red";
ctx.fillRect(100, 100, 40, 40);
// Kapsam durumunu geri yükle (clip işlemini bitir)
ctx.restore();
}
ciz();
</script>
Çıktı şöyle olacaktır: Görüldüğü gibi yıldız çizildikten ve kırpma alanı olarak belirlendikten sonra yapılan çizimlerin şeklin içinde kalan kısımları görüntülenmektedir. fillRect ve strokeRect gibi yol (path) oluşturmayan ( beginPath ile başlamadığınız) şekiller kırpma alanı olarak kullanılamaz. fillText ve strokeText yöntemleri de bir işe yaramaz. Yani clip kullanarak bir metin maskesi elde edemezsiniz. Metin maskesi oluşturma işlemi için Canvas globalCompositeOperation Özelliği makalesine bakabilirsiniz. Eğer dörtgen bir kırpma alanı belirlemek istiyorsanız rect yöntemini kullanın. Örnekte de belirtildiği gibi kırpma alanı hazırlandıktan sonra stroke veya fill yöntemlerini kullanmak zorunda değilsiniz. Ancak kırpma alanının şeklini göstermek istiyorsanız stroke veya kırpma zeminini renklendirmek istiyorsanız fill kullanın. fill kullandığınızda maskelenen şeklin görünen kısmı, kırpma şeklinin dolgusunun üstünde görülecektir. clip ile yapılan kırpmayı iptal etmek için save ile beraber restore yöntemini kullanın. clip İle İç Gölge Oluşturma clip yöntemi bir iç gölge oluşturmak için kullanılabilir. Bunu yapmak için kırpma şeklini belirledikten sonra tanımlanmış dolgu rengiyle tuvalin tamamını dodurun. Arkasından sadece blur özelliğine sahip bir gölge tanımlayıp kırpma şeklini kenarlıklı olarak aynı konuma yeniden çizin. Örnek: <canvas id="cnTuval" width="200" height="200" style="border:solid 1px red">
Tarayıcınız HTML5 desteklemiyor.
</canvas><br />
<script>
function ciz() {
var tuval = document.getElementById("cnTuval");
var ctx = tuval.getContext("2d");
ctx.save();
ctx.fillStyle = "red";
// Bir yıldız şekli oluştur.
yildizOlustur(ctx);
// Şekli doldur.
ctx.fill();
// Aynı şekli kırpma alanı olarak belirle.
ctx.clip();
// Tüm tuvali doldur.
ctx.beginPath();
ctx.rect(0, 0, tuval.width, tuval.height);
ctx.fill();
// Sadece blur özelliğine sahip bir gölge oluştur.
ctx.shadowColor = 'black';
ctx.shadowBlur = 15;
ctx.shadowOffsetX = 0;
ctx.shadowOffsetY = 0;
// Yeni bir yıldız oluştur
yildizOlustur(ctx);
// Yıldıza kenarlık çiz.
ctx.stroke();
}
function yildizOlustur(ctx) {
// Bir yıldız çiz.
ctx.beginPath();
ctx.moveTo(100, 52);
ctx.lineTo(116, 84);
ctx.lineTo(150, 88);
ctx.lineTo(126, 114);
ctx.lineTo(130, 150);
ctx.lineTo(100, 132);
ctx.lineTo(70, 150);
ctx.lineTo(76, 114);
ctx.lineTo(50, 90);
ctx.lineTo(84, 84);
ctx.closePath();
}
ciz();
</script>
Çıktı şöyle olacaktır: Bu kadar. Bir eksik veya hata görürseniz lütfen bildirin. İlgili Makaleler HTML5 ve Flash üzerine HTML5 Canvas etiketi ile çizim Canvas etiketine düz çizgilerle çizim yapmak Canvas ile dörtgenler çizmek Canvas ile daire, çember, yay ve dilimler çizmek Canvas ile eğriler çizmek Canvas ile metin görüntüleme Canvas çizgi uçları ve çizgi birleşimleri Canvas çizimlerinde tuval durumunu saklama ve geri yükleme Canvas ile gölge efekti oluşturma Canvas ile tuval üzerine resim çizmek Canvas ile degrade / gradient (geçişli renk) dokuları oluşturma Canvas ile dönüşüm işlemleri 1: Tuvali kaydırma ve döndürme Canvas ile dönüşüm işlemleri 2: Ölçekleme Canvas ile dönüşüm işlemleri 3: Transform ile Dönüşüm Canvas ile resim dokusu oluşturma Canvas Clip Yöntemiyle Maskeleme (Bu makale) Canvas globalAlpha Özelliği Canvas globalCompositeOperation Özelliği Canvas İle Piksel İşlemleri
Ekleyen: canora
Değiştiren: canora
01.05.16 02:12
Canvas Clip Yöntemiyle Maskeleme
Canvas clip yöntemi, belirtilen bir yolu (çizgilerle oluşturulan bir çizim) kullanarak daha sonra oluşturulcak çizimler için bir pencere oluşturur. Sonradan yapılan çizimler, clip ile belirtilen şeklin içinden görünür. Dolayısıyla çizilen şekiller maskelenmiş olur. Kullanımı: ctx.clip(); Örnek: <canvas id="cnTuval" width="200" height="200" style="border:solid 1px red"> Tarayıcınız HTML5 desteklemiyor. </canvas><br /> <script> function ciz() { var tuval = document.getElementById("cnTuval"); var ctx = tuval.getContext("2d"); // clip'den önceki duruma dönebilmek için kapsam durumunu sakla. ctx.save(); // Bir yıldız çiz. ctx.beginPath(); ctx.moveTo(100, 52); ctx.lineTo(116, 84); ctx.lineTo(150, 88); ctx.lineTo(126, 114); ctx.lineTo(130, 150); ctx.lineTo(100, 132); ctx.lineTo(70, 150); ctx.lineTo(76, 114); ctx.lineTo(50, 90); ctx.lineTo(84, 84); ctx.closePath(); ctx.stroke(); // Kullanmak zorunlu değildir. fill de kullanabilirsiniz. // Çizilen şekli kırpma alanı (pencere) olarak belirle. ctx.clip(); // Kırmızı bir dörtgen çiz. ctx.fillStyle = "red"; ctx.fillRect(100, 100, 40, 40); // Kapsam durumunu geri yükle (clip işlemini bitir) ctx.restore(); } ciz(); </script> Çıktı şöyle olacaktır: Görüldüğü gibi yıldız çizildikten ve kırpma alanı olarak belirlendikten sonra yapılan çizimlerin şeklin içinde kalan kısımları görüntülenmektedir. fillRect ve strokeRect gibi yol (path) oluşturmayan ( beginPath ile başlamadığınız) şekiller kırpma alanı olarak kullanılamaz. fillText ve strokeText yöntemleri de bir işe yaramaz. Yani clip kullanarak bir metin maskesi elde edemezsiniz. Metin maskesi oluşturma işlemi için Canvas globalCompositeOperation Özelliği makalesine bakabilirsiniz. Eğer dörtgen bir kırpma alanı belirlemek istiyorsanız rect yöntemini kullanın. Örnekte de belirtildiği gibi kırpma alanı hazırlandıktan sonra stroke veya fill yöntemlerini kullanmak zorunda değilsiniz. Ancak kırpma alanının şeklini göstermek istiyorsanız stroke veya kırpma zeminini renklendirmek istiyorsanız fill kullanın. fill kullandığınızda maskelenen şeklin görünen kısmı, kırpma şeklinin dolgusunun üstünde görülecektir. clip ile yapılan kırpmayı iptal etmek için save ile beraber restore yöntemini kullanın. clip İle İç Gölge Oluşturma clip yöntemi bir iç gölge oluşturmak için kullanılabilir. Bunu yapmak için kırpma şeklini belirledikten sonra tanımlanmış dolgu rengiyle tuvalin tamamını dodurun. Arkasından sadece blur özelliğine sahip bir gölge tanımlayıp kırpma şeklini kenarlıklı olarak aynı konuma yeniden çizin. Örnek: <canvas id="cnTuval" width="200" height="200" style="border:solid 1px red"> Tarayıcınız HTML5 desteklemiyor. </canvas><br /> <script> function ciz() { var tuval = document.getElementById("cnTuval"); var ctx = tuval.getContext("2d"); ctx.save(); ctx.fillStyle = "red"; // Bir yıldız şekli oluştur. yildizOlustur(ctx); // Şekli doldur. ctx.fill(); // Aynı şekli kırpma alanı olarak belirle. ctx.clip(); // Tüm tuvali doldur. ctx.beginPath(); ctx.rect(0, 0, tuval.width, tuval.height); ctx.fill(); // Sadece blur özelliğine sahip bir gölge oluştur. ctx.shadowColor = 'black'; ctx.shadowBlur = 15; ctx.shadowOffsetX = 0; ctx.shadowOffsetY = 0; // Yeni bir yıldız oluştur yildizOlustur(ctx); // Yıldıza kenarlık çiz. ctx.stroke(); } function yildizOlustur(ctx) { // Bir yıldız çiz. ctx.beginPath(); ctx.moveTo(100, 52); ctx.lineTo(116, 84); ctx.lineTo(150, 88); ctx.lineTo(126, 114); ctx.lineTo(130, 150); ctx.lineTo(100, 132); ctx.lineTo(70, 150); ctx.lineTo(76, 114); ctx.lineTo(50, 90); ctx.lineTo(84, 84); ctx.closePath(); } ciz(); </script> Çıktı şöyle olacaktır: Bu kadar. Bir eksik veya hata görürseniz lütfen bildirin. Canvas üzerine çizim ile ilgili diğer makaleler için tıklayın.
Ekleyen: canora