Canvas入门(2):图形渐变和图像形变换
来源:http://www.ido321.com/986.html 一、图形渐变(均在最新版Google中测试) 1、绘制线性渐变 1: // 获取canvas 的ID 2: var canvas = document.getElementById( 'canvas' ); 3: if (canvas == null ) 4: { 5: return false ; 6: } 7: // 获取上下文 8:
来源:http://www.ido321.com/986.html
一、图形渐变(均在最新版Google中测试)
1、绘制线性渐变
<span> 1:</span><span> <span>// 获取canvas 的ID</span></span>
<span> 2:</span><span> <span>var</span> canvas = document.getElementById(<span>'canvas'</span>);</span>
<span> 3:</span><span> <span>if</span> (canvas == <span>null</span>)</span>
<span> 4:</span><span> {</span>
<span> 5:</span><span> <span>return</span> <span>false</span>;</span>
<span> 6:</span><span> }</span>
<span> 7:</span><span> <span>// 获取上下文</span></span>
<span> 8:</span><span> <span>var</span> context = canvas.getContext(<span>'2d'</span>);</span>
<span> 9:</span><span> <span>// 获取渐变对象</span></span>
<span> 10:</span><span> <span>var</span> g1 = context.createLinearGradient(0,0,0,300);</span>
<span> 11:</span><span> <span>// 添加渐变颜色</span></span>
<span> 12:</span><span> g1.addColorStop(0,<span>'rgb(255,255,0)'</span>);</span>
<span> 13:</span><span> g1.addColorStop(1,<span>'rgb(0,255,255)'</span>);</span>
<span> 14:</span><span> context.fillStyle = g1;</span>
<span> 15:</span><span> context.fillRect(0,0,400,300);</span>
<span> 16:</span><span> <span>var</span> g2 = context.createLinearGradient(0,0,300,0);</span>
<span> 17:</span><span> g2.addColorStop(0,<span>'rgba(0,0,255,0.5)'</span>);</span>
<span> 18:</span><span> g2.addColorStop(1,<span>'rgba(255,0,0,0.5)'</span>);</span>
<span> 19:</span><span> <span>for</span>(<span>var</span> i = 0; i</span>
<span> 20:</span><span> {</span>
<span> 21:</span><span> context.beginPath();</span>
<span> 22:</span><span> context.fillStyle=g2;</span>
<span> 23:</span><span> context.arc(i*25, i*25, i*10, 0, Math.PI * 2, <span>true</span>);</span>
<span> 24:</span><span> context.closePath();</span>
<span> 25:</span><span> context.fill();</span>
<span> 26:</span><span> }</span>
createLinearGradient(x1,y1,x2,y2):参数分别表示渐变起始位置和结束位置的横纵坐标
addColorStop(offset,color):offset表示设定的颜色离渐变起始位置的偏移量,取值范围是0~1的浮点值。渐变起始偏移量是0,渐变结束偏移量是1.color是渐变的颜色。
效果:
2、绘制径向渐变
<span> 1:</span><span> <span>// 获取canvas 的ID</span></span>
<span> 2:</span><span> <span>var</span> canvas = document.getElementById(<span>'canvas'</span>);</span>
<span> 3:</span><span> <span>if</span> (canvas == <span>null</span>)</span>
<span> 4:</span><span> {</span>
<span> 5:</span><span> <span>return</span> <span>false</span>;</span>
<span> 6:</span><span> }</span>
<span> 7:</span><span> <span>// 获取上下文</span></span>
<span> 8:</span><span> <span>var</span> context = canvas.getContext(<span>'2d'</span>);</span>
<span> 9:</span><span> <span>// 获取渐变对象</span></span>
<span> 10:</span><span> <span>var</span> g1 = context.createRadialGradient(400,0,0,400,0,400);</span>
<span> 11:</span><span> <span>// 添加渐变颜色</span></span>
<span> 12:</span><span> g1.addColorStop(0.1,<span>'rgb(255,255,0)'</span>);</span>
<span> 13:</span><span> g1.addColorStop(0.3,<span>'rgb(255,0,255)'</span>);</span>
<span> 14:</span><span> g1.addColorStop(1,<span>'rgb(0,255,255)'</span>);</span>
<span> 15:</span><span> context.fillStyle = g1;</span>
<span> 16:</span><span> context.fillRect(0,0,400,300);</span>
<span> 17:</span><span> <span>var</span> g2 = context.createRadialGradient(250,250,0,250,250,300);</span>
<span> 18:</span><span> g2.addColorStop(1,<span>'rgba(0,0,255,0.5)'</span>);</span>
<span> 19:</span><span> g2.addColorStop(0.7,<span>'rgba(255,255,0,0.5)'</span>)</span>
<span> 20:</span><span> g2.addColorStop(0.1,<span>'rgba(255,0,0,0.5)'</span>);</span>
<span> 21:</span><span> <span>for</span>(<span>var</span> i = 0; i</span>
<span> 22:</span><span> {</span>
<span> 23:</span><span> context.beginPath();</span>
<span> 24:</span><span> context.fillStyle=g2;</span>
<span> 25:</span><span> context.arc(i*25, i*25, i*10, 0, Math.PI * 2, <span>true</span>);</span>
<span> 26:</span><span> context.closePath();</span>
<span> 27:</span><span> context.fill();</span>
<span> 28:</span><span> }</span>
createRadialGradient(x1,y1,radius1,x2,y2,radius2):x1,y1,radius1分别是渐变开始圆的圆心横纵坐标和半径。x2,y2,radius2分别是渐变结束圆的圆心横纵坐标和半径。
效果

二、图形变换
1、坐标变换:平移、缩放和旋转
<span> 1:</span><span> <span>// 获取canvas 的ID</span></span>
<span> 2:</span><span> <span>var</span> canvas = document.getElementById(<span>'canvas'</span>);</span>
<span> 3:</span><span> <span>if</span> (canvas == <span>null</span>)</span>
<span> 4:</span><span> {</span>
<span> 5:</span><span> <span>return</span> <span>false</span>;</span>
<span> 6:</span><span> }</span>
<span> 7:</span><span> <span>// 获取上下文</span></span>
<span> 8:</span><span> <span>var</span> context = canvas.getContext(<span>'2d'</span>);</span>
<span> 9:</span><span> context.fillStyle = <span>'#eeeeff'</span>;</span>
<span> 10:</span><span> context.fillRect(0,0,400,300);</span>
<span> 11:</span><span> <span>// 平移坐标原点</span></span>
<span> 12:</span><span> context.translate(200,50);</span>
<span> 13:</span><span> context.fillStyle = <span>'rgba(255,0,0,0.25)'</span>;</span>
<span> 14:</span><span> <span>for</span>(<span>var</span> i = 0; i</span>
<span> 15:</span><span> {</span>
<span> 16:</span><span> context.translate(25,25);</span>
<span> 17:</span><span> <span>// 图形缩放</span></span>
<span> 18:</span><span> context.scale(0.95,0.95);</span>
<span> 19:</span><span> <span>// 图形旋转</span></span>
<span> 20:</span><span> context.rotate(Math.PI / 10);</span>
<span> 21:</span><span> context.fillRect(0,0,100,50);</span>
<span> 22:</span><span> }</span>
translate(x,y):平移原点,x,y表示向左和向下移动多少单位,默认单位是像素
scale(x,y):缩放,x,y表示水平和垂直方向的缩放大小。小于1缩小,大于1放大。
rotate(angle):旋转,angle是旋转角度,单位是弧度。大于0表示顺时针旋转,反之逆时针。
效果:

2、矩阵变换
<span> 1:</span><span> <span>// 获取canvas 的ID</span></span>
<span> 2:</span><span> <span>var</span> canvas = document.getElementById(<span>'canvas'</span>);</span>
<span> 3:</span><span> <span>if</span> (canvas == <span>null</span>)</span>
<span> 4:</span><span> {</span>
<span> 5:</span><span> <span>return</span> <span>false</span>;</span>
<span> 6:</span><span> }</span>
<span> 7:</span><span> <span>// 获取上下文</span></span>
<span> 8:</span><span> <span>var</span> context = canvas.getContext(<span>'2d'</span>);</span>
<span> 9:</span><span> <span>// 定义颜色</span></span>
<span> 10:</span><span> <span>var</span> colors = [<span>'red'</span>,<span>'orange'</span>,<span>'yellow'</span>,<span>'green'</span>,<span>'blue'</span>,<span>'navy'</span>,<span>'purple'</span>];</span>
<span> 11:</span><span> <span>// 定义线宽</span></span>
<span> 12:</span><span> context.lineWidth = 10;</span>
<span> 13:</span><span> <span>// 矩阵变换</span></span>
<span> 14:</span><span> context.transform(1,0,0,1,100,0);</span>
<span> 15:</span><span> <span>// 循环绘制圆弧</span></span>
<span> 16:</span><span> <span>for</span> (<span>var</span> i = 0; i </span>
17: { //原点每次下移10个px
<span> 18:</span><span> context.transform(1,0,0,1,0,10);</span>
<span> 19:</span><span> context.strokeStyle = colors[i];</span>
<span> 20:</span><span> context.beginPath();</span>
<span> 21:</span><span> context.arc(50,100,100,0,Math.PI,<span>true</span>);</span>
<span> 22:</span><span> context.stroke();</span>
<span> 23:</span><span> }</span>
transform(m11,m12,m21,m22,dx,dy):改方法使用一个新的变换矩阵与当前变换矩阵进行乘法运算。dx,dy表示原点坐标左移和下移的单位,默认是像素。
该变换矩阵格式如下
m11 m12 dx
m21 m22 dy
0 0 1
最终效果:

总结:坐标变换的方法均可以用transform()代替,规则如下:
1、translate(x,y) transform(1,0,0,1,dx,dy)或transform(0,1,1,0,dx,dy),前四个参数表示不对图形进行缩放操作。
2、scale(x,y) transform(x,0,0,y,0,0)或transform(0,y,x,0,0,0),后面两个参数表示不进行平移。
3、rotate(angle) transform(Math.cos(angle*Math.PI/180),Math.sin(angle*Math.PI/180),-Math.sin(angle*Math.PI/180),Math.cos(angle*Math.PI/180),0,0)或
transform(-Math.sin(angle*Math.PI/180),Math.cos(angle*Math.PI/180),Math.cos(angle*Math.PI/180),Math.sin(angle*Math.PI/180),0,0)
Canvas入门(3):图像处理和绘制文字

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Penyebaran bukan sahaja boleh meniru lebih baik, tetapi juga "mencipta". Model resapan (DiffusionModel) ialah model penjanaan imej. Berbanding dengan algoritma yang terkenal seperti GAN dan VAE dalam bidang AI, model resapan mengambil pendekatan yang berbeza. Idea utamanya ialah proses menambah hingar pada imej dan kemudian secara beransur-ansur menolaknya. Cara mengecilkan dan memulihkan imej asal adalah bahagian teras algoritma. Algoritma akhir mampu menghasilkan imej daripada imej bising rawak. Dalam beberapa tahun kebelakangan ini, pertumbuhan luar biasa AI generatif telah membolehkan banyak aplikasi menarik dalam penjanaan teks ke imej, penjanaan video dan banyak lagi. Prinsip asas di sebalik alat generatif ini ialah konsep resapan, mekanisme pensampelan khas yang mengatasi batasan kaedah sebelumnya.

Kimi: Hanya dalam satu ayat, dalam sepuluh saat sahaja, PPT akan siap. PPT sangat menjengkelkan! Untuk mengadakan mesyuarat, anda perlu mempunyai PPT; untuk menulis laporan mingguan, anda perlu mempunyai PPT untuk membuat pelaburan, anda perlu menunjukkan PPT walaupun anda menuduh seseorang menipu, anda perlu menghantar PPT. Kolej lebih seperti belajar jurusan PPT Anda menonton PPT di dalam kelas dan melakukan PPT selepas kelas. Mungkin, apabila Dennis Austin mencipta PPT 37 tahun lalu, dia tidak menyangka satu hari nanti PPT akan berleluasa. Bercakap tentang pengalaman sukar kami membuat PPT membuatkan kami menitiskan air mata. "Ia mengambil masa tiga bulan untuk membuat PPT lebih daripada 20 muka surat, dan saya menyemaknya berpuluh-puluh kali. Saya rasa ingin muntah apabila saya melihat PPT itu." ialah PPT." Jika anda mengadakan mesyuarat dadakan, anda harus melakukannya

Pada awal pagi 20 Jun, waktu Beijing, CVPR2024, persidangan penglihatan komputer antarabangsa teratas yang diadakan di Seattle, secara rasmi mengumumkan kertas kerja terbaik dan anugerah lain. Pada tahun ini, sebanyak 10 kertas memenangi anugerah, termasuk 2 kertas terbaik dan 2 kertas pelajar terbaik Selain itu, terdapat 2 pencalonan kertas terbaik dan 4 pencalonan kertas pelajar terbaik. Persidangan teratas dalam bidang visi komputer (CV) ialah CVPR, yang menarik sejumlah besar institusi penyelidikan dan universiti setiap tahun. Mengikut statistik, sebanyak 11,532 kertas telah diserahkan tahun ini, 2,719 daripadanya diterima, dengan kadar penerimaan 23.6%. Menurut analisis statistik data CVPR2024 Institut Teknologi Georgia, dari perspektif topik penyelidikan, bilangan kertas terbesar ialah sintesis dan penjanaan imej dan video (Imageandvideosyn

Kami tahu bahawa LLM dilatih pada kelompok komputer berskala besar menggunakan data besar-besaran Tapak ini telah memperkenalkan banyak kaedah dan teknologi yang digunakan untuk membantu dan menambah baik proses latihan LLM. Hari ini, perkara yang ingin kami kongsikan ialah artikel yang mendalami teknologi asas dan memperkenalkan cara menukar sekumpulan "logam kosong" tanpa sistem pengendalian pun menjadi gugusan komputer untuk latihan LLM. Artikel ini datang daripada Imbue, sebuah permulaan AI yang berusaha untuk mencapai kecerdasan am dengan memahami cara mesin berfikir. Sudah tentu, mengubah sekumpulan "logam kosong" tanpa sistem pengendalian menjadi gugusan komputer untuk latihan LLM bukanlah proses yang mudah, penuh dengan penerokaan dan percubaan dan kesilapan, tetapi Imbue akhirnya berjaya melatih LLM dengan 70 bilion parameter proses terkumpul

Editor Laporan Kuasa Mesin: Yang Wen Gelombang kecerdasan buatan yang diwakili oleh model besar dan AIGC telah mengubah cara kita hidup dan bekerja secara senyap-senyap, tetapi kebanyakan orang masih tidak tahu cara menggunakannya. Oleh itu, kami telah melancarkan lajur "AI dalam Penggunaan" untuk memperkenalkan secara terperinci cara menggunakan AI melalui kes penggunaan kecerdasan buatan yang intuitif, menarik dan padat serta merangsang pemikiran semua orang. Kami juga mengalu-alukan pembaca untuk menyerahkan kes penggunaan yang inovatif dan praktikal. Pautan video: https://mp.weixin.qq.com/s/2hX_i7li3RqdE4u016yGhQ Baru-baru ini, vlog kehidupan seorang gadis yang tinggal bersendirian menjadi popular di Xiaohongshu. Animasi gaya ilustrasi, ditambah dengan beberapa perkataan penyembuhan, boleh diambil dengan mudah dalam beberapa hari sahaja.

Tajuk: Wajib dibaca untuk pemula teknikal: Analisis kesukaran bahasa C dan Python, memerlukan contoh kod khusus Dalam era digital hari ini, teknologi pengaturcaraan telah menjadi keupayaan yang semakin penting. Sama ada anda ingin bekerja dalam bidang seperti pembangunan perisian, analisis data, kecerdasan buatan, atau hanya belajar pengaturcaraan kerana minat, memilih bahasa pengaturcaraan yang sesuai ialah langkah pertama. Di antara banyak bahasa pengaturcaraan, bahasa C dan Python adalah dua bahasa pengaturcaraan yang digunakan secara meluas, masing-masing mempunyai ciri tersendiri. Artikel ini akan menganalisis tahap kesukaran bahasa C dan Python

Retrieval-augmented generation (RAG) ialah teknik yang menggunakan perolehan semula untuk meningkatkan model bahasa. Secara khusus, sebelum model bahasa menjana jawapan, ia mendapatkan semula maklumat yang berkaitan daripada pangkalan data dokumen yang luas dan kemudian menggunakan maklumat ini untuk membimbing proses penjanaan. Teknologi ini boleh meningkatkan ketepatan dan perkaitan kandungan dengan banyak, mengurangkan masalah halusinasi dengan berkesan, meningkatkan kelajuan kemas kini pengetahuan, dan meningkatkan kebolehkesanan penjanaan kandungan. RAG sudah pasti salah satu bidang penyelidikan kecerdasan buatan yang paling menarik. Untuk butiran lanjut tentang RAG, sila rujuk artikel lajur di tapak ini "Apakah perkembangan baharu dalam RAG, yang pakar dalam menebus kekurangan model besar?" Ulasan ini menerangkannya dengan jelas." Tetapi RAG tidak sempurna, dan pengguna sering menghadapi beberapa "titik kesakitan" apabila menggunakannya. Baru-baru ini, penyelesaian AI generatif termaju NVIDIA

VSCode (Visual Studio Code) ialah editor kod sumber terbuka yang dibangunkan oleh Microsoft Ia mempunyai fungsi yang berkuasa dan sokongan pemalam yang kaya, menjadikannya salah satu alat pilihan untuk pembangun. Artikel ini akan menyediakan panduan pengenalan untuk pemula untuk membantu mereka menguasai kemahiran menggunakan VSCode dengan cepat. Dalam artikel ini, kami akan memperkenalkan cara memasang VSCode, operasi penyuntingan asas, kekunci pintasan, pemasangan pemalam, dsb., dan menyediakan contoh kod khusus kepada pembaca. 1. Pasang VSCode dahulu, kita perlu
