站內搜尋:Yahoo搜尋的結果,如果沒有給完整的網址,請在站內再搜尋一次!

顯示具有 JavaScript 標籤的文章。 顯示所有文章
顯示具有 JavaScript 標籤的文章。 顯示所有文章

2025-02-05

〈Gemini〉如何使用JavaScript從字型檔中提取文字,並將指定文字儲存為 SVG 檔案?

https://g.co/gemini/share/0988d1179bb5 

以下是如何使用 JavaScript 從字型檔中提取文字,並將指定文字儲存為 SVG 檔案的步驟:

1. 載入字型檔

您可以使用 FontFace API 來載入字型檔。首先,您需要創建一個 FontFace 物件,並指定字型名稱和檔案路徑。然後,您可以使用 document.fonts.add() 方法將字型添加到文檔中。

JavaScript
const font = new FontFace('MyFont', 'url(path/to/font.woff2)');
document.fonts.add(font);

2. 提取文字

您可以使用 Canvas API 來提取字型中的文字。首先,您需要創建一個 Canvas 元素,並將其繪製環境設置為 2D。然後,您可以使用 fillText() 方法將文字繪製到 Canvas 上。

JavaScript
const canvas = document.createElement('canvas');
const context = canvas.getContext('2d');
context.font = '48px MyFont';
context.fillText('Hello, world!', 0, 0);

3. 將文字轉換為 SVG

您可以使用 Canvas 的 toDataURL() 方法將文字轉換為 Base64 編碼的 PNG 圖像。然後,您可以使用 SVG 的 image 元素將 PNG 圖像嵌入到 SVG 中。

JavaScript
const dataURL = canvas.toDataURL();
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
const image = document.createElementNS('http://www.w3.org/2000/svg', 'image');
image.setAttribute('href', dataURL);
svg.appendChild(image);

4. 將 SVG 儲存為檔案

您可以使用 Blob 和 URL API 將 SVG 儲存為檔案。首先,您需要將 SVG 轉換為字串。然後,您可以創建一個包含 SVG 字串的 Blob 物件。最後,您可以使用 URL.createObjectURL() 方法創建一個指向 Blob 物件的 URL,並將其設置為下載連結的 href 屬性。

JavaScript
const svgString = new XMLSerializer().serializeToString(svg);
const blob = new Blob([svgString], { type: 'image/svg+xml' });
const url = URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = 'text.svg';
link.click();

完整程式碼

以下是完整的程式碼:

JavaScript
const font = new FontFace('MyFont', 'url(path/to/font.woff2)');
document.fonts.add(font);

const canvas = document.createElement('canvas');
const context = canvas.getContext('2d');
context.font = '48px MyFont';
context.fillText('Hello, world!', 0, 0);

const dataURL = canvas.toDataURL();
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
const image = document.createElementNS('http://www.w3.org/2000/svg', 'image');
image.setAttribute('href', dataURL);
svg.appendChild(image);

const svgString = new XMLSerializer().serializeToString(svg);
const blob = new Blob([svgString], { type: 'image/svg+xml' });
const url = URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = 'text.svg';
link.click();

注意事項

  • 您需要將 path/to/font.woff2 替換為實際的字型檔路徑。
  • 您需要確保字型檔包含您要提取的文字。
  • 提取的文字將以 PNG 圖像的形式嵌入到 SVG 中。如果您需要將文字轉換為 SVG 路徑,您可以使用其他工具或函式庫。



《Copilot》如何使用JavaScript從字型檔中提取文字,並將指定文字儲存為 SVG 檔案?

 要使用 JavaScript 從字型檔中提取文字並將指定文字儲存為 SVG 檔案,您可以利用一些字型處理庫和 SVG 操作庫。以下是一個基本的步驟指南:

  1. 安裝所需庫:

    • opentype.js: 用於解析字型檔並提取字型輪廓。

    • svgpath:用於處理 SVG 路徑。

您可以使用 npm 安裝這些庫:

sh
npm install opentype.js svgpath
  1. 從字型檔中提取文字並生成 SVG:

javascript
const opentype = require('opentype.js');
const SvgPath = require('svgpath');
const fs = require('fs');

// 從字型檔中加載字型
opentype.load('path/to/your/font-file.ttf', (err, font) => {
    if (err) {
        console.error('字型加載失敗:', err);
        return;
    }

    // 指定文字
    const text = '示例文字';

    // 設定字型大小
    const fontSize = 72;
    let svgContent = '';

    // 生成每個字元的 SVG
    for (let char of text) {
        const glyph = font.charToGlyph(char);
        const path = glyph.getPath(0, 0, fontSize);
        const svgPath = SvgPath(path.toPathData(5)).toString();
        svgContent += `<path d="${svgPath}" fill="black"/>\n`;
    }

    // 包裝成完整的 SVG 檔案
    const svgHeader = `<svg xmlns="http://www.w3.org/2000/svg" width="500" height="500">\n`;
    const svgFooter = `</svg>`;

    const svgOutput = svgHeader + svgContent + svgFooter;

    // 將 SVG 檔案保存到本地
    fs.writeFileSync('output.svg', svgOutput);
    console.log('SVG 檔案已成功生成並保存為 output.svg');
});

這段程式碼會將指定的文字從字型檔中提取出來,並生成包含這些文字的 SVG 檔案。

2023-02-21

用JavaScrip偵測螢幕尺寸,使用範圍、工作區、網頁可見區域、網頁內容全文...的大小

用JavaScript 取得螢幕裝置各項數值的指令

  1. 目前使用範圍的高、寬
    document.documentElement.clientHeight
    document.documentElement.clientWidth
  2. 網頁可見區域的寬、高
    document.body.clientWidth
    document.body.clientHeight
  3. 網頁可見區域的寬、高
    document.body.offsetWidth(包括邊線和捲軸的寬)
    document.body.offsetHeight(包括邊線的寬)
  4. 網頁內容全文的寬、高
    document.body.scrollWidth
    document.body.scrollHeight
  5. 網頁被捲而隱藏的高(FireFox)  (the number of pixels the body is scrolled) (垂直方向)
    document.body.scrollTop
    網頁被捲而隱藏的高(IE)
    document.documentElement.scrollTop
  6. 網頁被捲而隱藏的左側  (the number of pixels the body is scrolled) (水平方向)
    document.body.scrollLeft
  7. 網頁內容(Screen)在網頁視窗(Window)的上緣(y座標)
    window.screenTop
  8. 網頁內容(Screen)在網頁視窗(Window)的左緣(x座標)
    window.screenLeft
  9. 螢幕解析度的高、寬 (Ex. 1080*1980)
    window.screen.height
    window.screen.width
  10. 螢幕可用工作區高、寬  (Ex. 1032*1980)
    window.screen.availHeight
    window.screen.availWidth
  11. 螢幕的顏色深度(彩色位元數)  (Ex. 24)
    window.screen.colorDepth
  12. 螢幕的像素深度(像素位元數)  (Ex. 24)
    window.screen.pixelDepth
  13. 螢幕的X、Y方向解析度(像素/英寸)
    window.screen.deviceXDPI
    window.screen.deviceYDPI
  14. 螢幕的X、Y方向邏輯解析度(像素/英寸)
    window.screen.logicalXDPI
    window.screen.logicalYDPI

  15. window.screen.bufferDepth
  16. window.screen.fontSmoothingEnabled
  17. window.screen.updateInterval

2023-02-08

使用 jsc.exe 把 JavaScript(.js)檔,轉換為exe執行檔

  • 如何取得 jsc.exe
    在安裝Windows的磁碟下,搜尋jsc.exe,複製到工作目錄下即可使用。
  • jsc.exe 指令的參數
    • C:\Users\hanni>jsc /help
    • Microsoft (R) JScript Compiler version 14.00.9032
    • for Microsoft (R) .NET Framework version 4.0.30319
    • Copyright (C) Microsoft Corporation. 著作權所有,並保留一切權利。

    • jsc [options] <source files> [[options] <source files>...]

    •                          JScript 編譯器選項

    •                            - 輸出檔 -
    •   /out:<file>              指定二進位輸出檔案的名稱
    •   /t[arget]:exe            建立主控台應用程式 (預設)
    •   /t[arget]:winexe         建立 Windows 應用程式
    •   /t[arget]:library        建立程式庫組件
    •   /platform:<platform>     限制這個程式碼可以在哪些平台執行; 必須是 x86、Itanium、x64 或任何 CPU (預設)

    •                            - 輸入檔 -
    •   /autoref[+|-]            以匯入的命名空間和完整名稱為基礎的自動參考組件 (預設值為 On)
    •   /lib:<path>              指定搜尋其他目錄以供參考之用
    •   /r[eference]:<file list> 從指定的組件檔來參考中繼資料
    •                            <file list>: <assembly name>[;<assembly name>...]

    •                            - 資源 -
    •   /win32res:<file>         指定 Win32 資源檔 (.res)
    •   /res[ource]:<info>       嵌入指定的資源
    •                            <info>: <filename>[,<name>[,public|private]]
    •   /linkres[ource]:<info>   將指定的資源連結至此組件
    •                            <info>: <filename>[,<name>[,public|private]]

    •                            - 程式碼產生 -
    •   /debug[+|-]              發出偵錯資訊
    •   /fast[+|-]               停用語言功能以產生較佳的程式碼
    •   /warnaserror[+|-]        警告視為錯誤
    •   /w[arn]:<level>          設定警告層級 (0-4)

    •                            - 其他 -
    •   @<filename>              讀取回應檔以取得更多選項
    •   /?                       顯示說明
    •   /help                    顯示說明
    •   /d[efine]:<symbols>      定義條件式編譯的符號
    •   /nologo                  不要顯示編譯器著作權橫幅
    •   /print[+|-]              提供 print() 函式

    •                            - 進階 -
    •   /codepage:<id>           使用指定的字碼頁 ID 開啟原始程式檔
    •   /lcid:<id>               為訊息和預設字碼頁使用指定的 LCID
    •   /nostdlib[+|-]           不要匯入標準程式庫 (mscorlib.dll) 並將 autoref 的預設值變更為 Off
    •   /utf8output[+|-]         以 UTF-8 字元編碼發出編譯器輸出
    •   /versionsafe[+|-]        指定未標記為 'override' 或 'hide' 成員的預設值

2015-10-03

JavaScript 半形轉全形‏

AS/400中文自有 0E 0F 隱藏字元的問題,這對需要計算有中文字和ASCII字元混雜的字串長度來說,好像有一點小複雜,所以就來個投機的方法,就把所有ASCII的半形字元轉換為對應的全形文字,來避開 0E 0F所帶來計算實際字串長度所帶來的困擾。

function Half2Full() {
    var i = 0;
    vat aTmp = new Array();
    var zStr1 = document.getElementById("字串來源ID").value;
    var zStr2 = "";
    for(i = 0; i < zStr1.length; i++) {
        if(zStr1.charCodeAt(i) >=0 && zStr1.charCodeAt(i) <= 32) {
            aTmp[i] = 0;   //ascii 小於等於 32的字元,都先清為 null
        } else if(zStr1.charCodeAt(i) >=33 && zStr1.charCodeAt(i) <= 126)  {
            aTmp[i] = zStr1.charCodeAt(i) + 65248;   //ascii介於33~126之間的字元,加上65248準備轉為全型unicode
        } else {
            aTmp[i] = zStr1.charCodeAt(i);
        }
        zStr2 += String.fromCharCode(aTmp[i]);    //轉為全型unicode
    }
    document.getElementById("字串來源ID").value = zStr2;  //裝轉換結果回填到原來源字串位置
}

2013-10-10

如何讓classic ASP程式的Session不受IIS的主機預設Timeout時間限制,維持所開啟ASP程式的可用狀態

以下範例程式執行後,會建立一個Session("LoginOK"),並將頁面轉址到,另一個程式NeverTimeout2.asp
<%
  session("LoginOK") = "OK"
  response.redirect "NeverTimeout2.asp"
%>

NeverTimeout2.asp,程式內容如下。
  • NeverTimeout2.asp繼續往下執行的條件是:Session("LoginOK")=OK
  • 讓NeverTimeout2.asp程式開啟後,一值保持在可用狀態的作法,如下:
    1. 在頁面中建立一個iFrame,將iFrame所要顯示的內容,指向另一個網頁;並將這個iFrame設定為不顯示,以免影響網頁內容的顯示。
    2. 開啟NeverTimeout2.asp後,使用JavaScript的setInterval(執行的內容, 間隔的時間),讓這個頁面每若干毫秒後,就重新更新一次iFrame的內容。
    3. 重新載入更新iFrame的作法:
      document.frames["iFrame的名稱"].location.reload();
<%
    if session("LoginOK") <> "OK" then
        response.write "Session Time!!!"
        response.end
    end if
    response.write request("text01")
%>
<html>
<head>
</head>
<script language=javascript>
    window.setInterval("reloadIFrame();", 60000);

    function reloadIFrame() {
       document.frames["ifContent"].location.reload();
    }
</script>
<body >
     <div>
         <iframe src="iFramePage.asp" id="ifContent" style="display:none;" >
         </iframe>
     </div>
     <form method=get name=form01 action=NeverTimeout2.asp >
         <input type=text id=text01 name=text01 >
         <input type=submit name=Send value=send>
     </form>
</body>
</html>


iFrame的應用是不是很妙?如果不方便使用XMLHttpRequest的進行ajax非同步存取,用iFrame加上JavaScript,來模擬一下ajax的效果,應該也會有不錯的效果。

2013-03-30

如何讓JavaScript的window.close()在關閉IE網頁時,不出現確認的對話方塊,直接關閉視窗?

最近在寫一隻模擬背景即時執行的asp程式,要使用window.close()關閉視窗時,會出現要求確認的對話方塊,要怎麼做才可以直接把IE視窗關掉呢?
<Script language=JavaScript>
        window.opener=null;
        window.open("","_self","");
        window.close();
</Script>
  • 瀏覽器視窗物件的方法、屬性、事件:
    • 方法:alert(message),close(),confirm(message),open(url,name,features),prompt(message,inputDefault),setTimeout(statement,delay),clearTimeout(timer)
    • 屬性:defaultStatus,frames[],length,name,opener,parent,self,status,top,window
    • 事件:onLoad,onUnload
  • 開啟新視窗window.open(url,name,features)的用法:
    • url:新視窗開啟後要載入的URL(連結網址),如果它是空字串(empty string),就會開啟空視窗。
    • name:新視窗名稱,但如果用作a和form的目標,即是它們的target屬性(_blank, _top, _self, _parent)
    • features:所開啟視窗的屬性(height,width,location,directories,menubar,scrollbars,status,toolbar,resizable)
  • 參考資料:
    • http://www.w3school.com.cn/htmldom/dom_obj_window.asp
    • http://www.w3schools.com/jsref/obj_window.asp
    • http://taiwantc.com/js/js_tut_b_window0.htm

使用JavaScript讓開啟的網頁,在固定位置以固定的大小顯示

<HTML>
<HEAD>
<TITLE>讓網頁頁面在固定位置以固定大小顯示</TITLE>
<Script Language="Javascript">
<!--
    self.moveTo(0,0);
    self.resizeTo(500,400);  
    //self.resizeTo(window.screen.availWidth, window.screen.availHeight);
    window.onresize = function() { self.moveTo(0,0); self.resizeTo(500,400); }
-->
</Script>
</HEAD>
<BODY>
讓網頁頁面在固定位置以固定大小顯示
</BODY>
</HTML>

2011-02-23

使用JavaScript建立Blogger部落格網站的標籤分類文章標題列表(TOC:Table of Contents)

建立Blogger部落格網站的標籤分類文章標題列表的作法:
  1. 發表一篇文章,建立類似這樣的標題:小書製作網站的文章標題列表
  2. 切換到『修改HTML』的文章編輯模式。並貼上以下內容:
    <script style="text/javascript" src="http://abu-farhan.com/script/daftarisibloggerarchive/tocbyarchivemin.js"></script>
    <script src="http://books.bod.idv.tw/feeds/posts/default?max-results=500&alt=json-in-script&callback=loadtoc"></script>
    
  3. 第一段Script可以不必變動,這是該網站所提供的js檔連結位置。
  4. 第二段Script中的books.bod.idv.tw,要更改為自己Blogger的網址。
  5. 其中max-results=500,設定指產生500篇文章的列表。
  6. 如果要自己建立js檔案,取得JavaScript檔案的位置:
    • 依照時間分類:
      http://abu-farhan.com/script/daftarisibloggerarchive/tocbyarchivemin.js
    • 依照標籤分類:(SiteMap網站地圖)
      http://www.abu-farhan.com/script/daftarisiblogger/blogtoc-min.js
  7. 用來產生文章列表的文章建立後,會有一個對應的網址。
    例如:『小書製作網站的文章標題列表』http://books.bod.idv.tw/2011/02/bod-idv-tw.html
    使用這個網址在Blogger部落格網站上,建立一個文章列表的連結,點選這個連結就可以取的這個網站的500篇文章的標籤分類列表。
參考資料一:
0 與 1 謎詭世界:http://01mistery.blogspot.com/
參考資料二:
Create Table of Contents in Blogger sorted by Date(Archived) or Labels in Blogger
參考資料三:http://www.abu-farhan.com/
參考資料四:http://beautifulbeta.blogspot.com/