透過網頁讀取PSD後,依圖層輸出PNG檔案

在前面介紹過網頁可以讀取PSD檔案並擷取到該檔案的資訊,接著我們會希望能透過網頁上傳PSD檔之後,依照圖層來輸出圖片,同樣是利用PSD.js來輔助進行,可以透過我們製作的範例頁面來進行輸出測試。

預設輸出效果


透過PSD.js可將PSD內的各圖層輸出成PNG圖檔,亦可轉成Base 64圖檔格式,惟輸出時每個圖檔的尺寸並不會根據整體PSD檔大小來配置。

圖層配置

Layer 1 (421 x 38)
Layer 2 (490 x 479)
Layer 3 (1024 x 800)

<!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中並不具備這樣的功能,於是我們透過下述的方式來達成:

  1. 擷取PSD資訊並將圖檔轉為Base 64格式
  2. 產生與PSD尺寸大小相同的HTML Canvas
  3. 將產生的Base 64圖檔,依照原始位置放入Canvas中
  4. 將Canvas轉成PNG圖檔
圖層配置
Layer 1 (1024 x 800)
Layer 2 (1024 x 800)
Layer 3 (1024 x 800)

可以參考我們製作的範例頁面

<!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. 無法輸出帶有遮色片效果的圖片

圖層設定
Before
After

解決方法:將圖層轉為智慧型物件,即可輸出相對應的圖檔。

3. 無法依圖層混合模式輸出圖片

Layer 1
Layer 2
Layer 3
Layer 4

解決方法:無法解決

You may also like...

39,060 Responses

  1. ChrisCab表示:

    how to get cheap clomid without rx: where to buy cheap clomid without insurance – where to get cheap clomid price

  2. Jameskig表示:

    http://prednisonetablets.shop/# prednisone 12 tablets price

  3. Andrewwaize表示:

    https://prednisonetablets.shop/# cost of prednisone in canada

  4. The importance of keywords such as “Top-rated drunk driving lawyers” and “DUI legal representation specialists”
    is immense in a city like Las Vegas, NV. Situated in an energetic area, Clark McCourt Criminal
    Lawyers serves neighborhoods like Amber Hills and Arts
    District, where such legal expertise is often sought.

    Clark McCourt Criminal Lawyers is based in Las Vegas, a city founded
    in 1905 with a fascinating history. With a population of 646,
    790 (as of 2021) and 240,462 households, it’s a center of activity.

    The Las Vegas Beltway, a major highway, cuts across this bustling city.

    The cost of legal representation, especially for DUI cases, in Las Vegas can fluctuate.
    Given the city’s wide temperature variations, from scorching summers to chilly winters, it’s
    crucial to have reliable legal assistance.

    Among the city’s attractions, AREA15 and Aliante Nature Discovery Park stand out.

    For example, AREA15 offers immersive entertainment experiences, and Aliante Nature Discovery Park is celebrated
    for its scenic landscapes. Each provides distinct experiences, showcasing
    the variety Las Vegas has to offer.

    For those living in Las Vegas, opting for Clark McCourt Criminal Lawyers is a sensible choice.

    With their specialized knowledge in DUI cases and familiarity with the local community, they stand
    out as a top choice.

  5. Oliverdract表示:

    how much is prednisone 10 mg 20 mg prednisone tablet prednisone 20mg online pharmacy

  6. It’s a shame you don’t have a donate button! I’d
    definitely donate to this fantastic blog! I guess for now i’ll settle for bookmarking and adding your RSS feed to my Google account.
    I look forward to new updates and will talk about this website with my Facebook group.
    Talk soon!

  7. AaronduH表示:

    prednisone without prescription.net: prednisone cream rx – prednisone brand name india

  8. Andrewwaize表示:

    http://azithromycin.bid/# zithromax prescription online

  9. Oliverdract表示:

    amoxicillin 500mg capsule buy online buy amoxicillin 500mg capsules uk buy amoxicillin 500mg

  10. AaronduH表示:

    zithromax 600 mg tablets: zithromax 500 mg – zithromax prescription online

  11. Igpubv表示:

    buy clomid 100mg generic clomiphene order online clomiphene brand

  12. AaronduH表示:

    price of prednisone tablets: prednisone tablets – can i purchase prednisone without a prescription

  13. Jameskig表示:

    http://amoxicillin.bid/# amoxicillin 500mg for sale uk

  14. Oliverdract表示:

    online order prednisone 10mg cost of prednisone tablets purchase prednisone from india

  15. Andrewwaize表示:

    http://ivermectin.store/# stromectol nz

  16. AaronduH表示:

    stromectol xl: stromectol tablet 3 mg – cost of ivermectin cream

  17. Oliverdract表示:

    stromectol ivermectin lotion buy stromectol online

  18. AaronduH表示:

    prednisone pills cost: buy prednisone online fast shipping – prednisone in uk

  19. Jameskig表示:

    https://ivermectin.store/# ivermectin generic cream

  20. Andrewwaize表示:

    https://prednisonetablets.shop/# prednisone 20mg for sale

  21. ChrisCab表示:

    can you buy zithromax over the counter in mexico: zithromax online no prescription – zithromax 250 mg tablet price

  22. Oliverdract表示:

    can you buy zithromax over the counter in canada how much is zithromax 250 mg buy zithromax 500mg online

  23. AaronduH表示:

    where can i buy zithromax capsules: zithromax online usa no prescription – zithromax buy online

  24. VictorPen表示:

    Viagra femme ou trouver: Viagra gГ©nГ©rique pas cher livraison rapide – Viagra femme sans ordonnance 24h

  25. JerryDus表示:

    https://acheterkamagra.pro/# pharmacie ouverte

  26. RobertSherN表示:

    Pharmacie en ligne fiable acheter kamagra site fiable acheter medicament a l etranger sans ordonnance

  27. JerryDus表示:

    http://viagrasansordonnance.pro/# Viagra homme prix en pharmacie

  28. Jasonneome表示:

    Viagra pas cher inde: viagra sans ordonnance – Viagra gГ©nГ©rique sans ordonnance en pharmacie

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。