透過網頁讀取PSD後,依圖層輸出PNG檔案
在前面介紹過網頁可以讀取PSD檔案並擷取到該檔案的資訊,接著我們會希望能透過網頁上傳PSD檔之後,依照圖層來輸出圖片,同樣是利用PSD.js來輔助進行,可以透過我們製作的範例頁面來進行輸出測試。
預設輸出效果
透過PSD.js可將PSD內的各圖層輸出成PNG圖檔,亦可轉成Base 64圖檔格式,惟輸出時每個圖檔的尺寸並不會根據整體PSD檔大小來配置。




<!DOCTYPE html> <html> <head> <title>psd.js image example</title> <style type="text/css"> body, html { padding: 0; margin: 0; } #dropzone { width: 500px; height: 100px; border: 1px #ababab dashed; margin: 50px auto; } #dropzone p { text-align: center; line-height: 100px; margin: 0; padding: 0; } #image { text-align: center; } </style> <script type="text/javascript" src="psd.min.js"></script> </head> <body> <div id="dropzone"> <p>Drop PSD here</p> </div> <div id="image"></div> <pre id="data"></pre> <script type="text/javascript"> (function () { const PSD = require('psd'); document.getElementById('dropzone').addEventListener('dragover', onDragOver, true); document.getElementById('dropzone').addEventListener('drop', onDrop, true); function onDragOver(e) { e.stopPropagation(); e.preventDefault(); e.dataTransfer.dropEffect = 'copy'; } function onDrop(e) { e.stopPropagation(); e.preventDefault(); PSD.fromEvent(e).then(function (psd) { for (var i = 0; i < psd.layers.length; i ++){ document.getElementById('image').appendChild(psd.layers[i].image.toPng()); } }); } }()); </script> </body> </html>
依照整體PSD配置進行輸出
我們希望讓每個圖片在輸出後能保時相同的尺寸,也就是依照PSD的畫布大小來輸出每一張圖檔,但在原生PSD.js中並不具備這樣的功能,於是我們透過下述的方式來達成:
- 擷取PSD資訊並將圖檔轉為Base 64格式
- 產生與PSD尺寸大小相同的HTML Canvas
- 將產生的Base 64圖檔,依照原始位置放入Canvas中
- 將Canvas轉成PNG圖檔




可以參考我們製作的範例頁面
<!DOCTYPE html> <html> <head> <title>psd.js image example</title> <style type="text/css"> body, html { padding: 0; margin: 0; } #dropzone { width: 500px; height: 100px; border: 1px #ababab dashed; margin: 50px auto; } #dropzone p { text-align: center; line-height: 100px; margin: 0; padding: 0; } #image { text-align: center; } </style> <script type="text/javascript" src="psd.min.js"></script> </head> <body> <div id="dropzone"> <p>Drop PSD here</p> </div> <div id="image"></div> <pre id="data"></pre> <script type="text/javascript"> (function () { const PSD = require('psd'); document.getElementById('dropzone').addEventListener('dragover', onDragOver, true); document.getElementById('dropzone').addEventListener('drop', onDrop, true); function onDragOver(e) { e.stopPropagation(); e.preventDefault(); e.dataTransfer.dropEffect = 'copy'; } function onDrop(e) { e.stopPropagation(); e.preventDefault(); PSD.fromEvent(e).then(function (psd) { const PSDWidth = psd.tree().width; const PSDHeight = psd.tree().height; for (var i = 0; i < psd.layers.length; i ++){ const img = new Image(); img.src = psd.layers[i].image.toBase64(); console.log(psd); const layerWidth = psd.layers[i].width; const layerHeight = psd.layers[i].height; const layerLeft = psd.layers[i].left; const layerTop = psd.layers[i].top; const canvas = document.createElement("canvas"); canvas.setAttribute('class', "canvas"); canvas.width = PSDWidth; canvas.height = PSDHeight; console.log("canvas :", canvas); img.onload = function(){ canvas.getContext("2d").drawImage(img, layerLeft, layerTop, layerWidth, layerHeight); document.getElementById('image').appendChild(canvas); } } }); } }()); </script> </body> </html>
PSD檔案輸出限制
1. 無法輸出帶有效果的圖片
在PSD中我們可能會針對圖層套用一些效果,例如:陰影、光暈、筆畫…等等,但在輸出後的圖檔將不會帶有這些效果。



解決方法:透過點陣化圖層效果,即可輸出相對應的圖檔。
2. 無法輸出帶有遮色片效果的圖片



解決方法:將圖層轉為智慧型物件,即可輸出相對應的圖檔。
3. 無法依圖層混合模式輸出圖片






解決方法:無法解決
Banyak kasino memiliki program loyalitas untuk pemain http://preman69.tech/# п»їKasino di Indonesia sangat populer di kalangan wisatawan
смотреть новые фантастические фильмы онлайн Резка
Каталог финансовых организаций https://srochno-zaym-online.ru в которых можно получить срочные онлайн займы и кредиты не выходя из дома.
The 10 Most Terrifying Things About Upvc Repairs Near Me upvc repairs near
me [cox-tobiasen-3.hubstack.net]
http://slot88.company/# Mesin slot menawarkan pengalaman bermain yang cepat
С начала нового года АО “Алмазы Поморского края” предлагает инвесторам возможность участия в крупнейшем Pre-IPO на платформе FINMUSTER, направленном на привлечение средств для открытия новых алмазных месторождений в Архангельской области.
Совладелец алмазной компании
https://bonaslot.site/# Pemain sering mencoba berbagai jenis slot
Bermain slot bisa menjadi pengalaman sosial: bonaslot – bonaslot.site
Mesin slot digital semakin banyak diminati: slot demo pg gratis – slot demo gratis
Slot menawarkan kesenangan yang mudah diakses http://bonaslot.site/# Slot dengan grafis 3D sangat mengesankan
Mesin slot menawarkan pengalaman bermain yang cepat: demo slot pg – slot demo pg gratis
http://preman69.tech/# Slot dengan tema film terkenal menarik banyak perhatian
Slot dengan pembayaran tinggi selalu diminati: slot demo – slot demo gratis
garuda888 slot garuda888.top Kasino menawarkan pengalaman bermain yang seru
Banyak pemain mencari mesin dengan RTP tinggi: slot88 – slot 88
Registrar-se na [mesk bet](https://mesk-bet-88.com) é fácil e rápido! Crie sua conta preenchendo os dados necessários e comece a explorar o mundo das apostas online. Novos usuários ganham um bônus exclusivo ao se registrarem. Após o cadastro, faça login com segurança e aproveite uma plataforma completa para apostas e jogos de cassino.
Sacar dinheiro no winbra – https://www.winbra-br.com é um processo fácil e protegido. Os jogadores devem fornecer documentos de identidade válidos, comprovante de residência e os dados bancários corretos. Após a verificação, os fundos são liberados rapidamente. A plataforma utiliza tecnologias de ponta para proteger os dados financeiros de seus usuários.
Com a [8855 bet](https://8855-bet-88.com), registrar-se é fácil e cheio de recompensas. Crie sua conta agora mesmo e receba um bônus especial por ser novo usuário. Após finalizar o cadastro, faça login para acessar uma plataforma completa com apostas esportivas e jogos de cassino que vão tornar sua experiência inesquecível.
Quer um incentivo para começar no mundo das apostas? A [betleao](https://betleao-cassino.com) oferece um bônus exclusivo de US$ 100 para novos usuários! Basta criar sua conta, ativar o bônus e mergulhar na diversão. Seja nos jogos de cassino ou nas apostas esportivas, essa é a sua chance de jogar com mais emoção e recompensas.
Slot dengan grafis 3D sangat mengesankan: slot 88 – slot 88
Pemain bisa menikmati slot dari kenyamanan rumah: slot 88 – slot88.company
http://slot88.company/# Slot dengan tema budaya lokal menarik perhatian
https://bonaslot.site/# Slot dengan pembayaran tinggi selalu diminati
15 Best Psychiatrists Near Me Bloggers You Need To Follow best Psychiatrists near
me – huang-eskildsen.blogbright.net –
Saques no [esportiva bet](https://esportiva-bet-br.com) são rápidos e seguros! Basta fornecer informações como nome, conta bancária e CPF para validar sua solicitação. Com um sistema avançado de proteção de dados, a plataforma assegura que seus fundos sejam transferidos de maneira eficiente e sem riscos.
Banyak kasino memiliki program loyalitas untuk pemain http://slotdemo.auction/# Mesin slot baru selalu menarik minat
Banyak pemain mencari mesin dengan RTP tinggi https://slotdemo.auction/# Slot dengan tema film terkenal menarik banyak perhatian
http://slotdemo.auction/# Banyak kasino memiliki promosi untuk slot
http://slot88.company/# Banyak pemain berusaha untuk mendapatkan jackpot
garuda888 garuda888 slot Permainan slot bisa dimainkan dengan berbagai taruhan