透過網頁讀取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...

45,323 Responses

  1. 人形 エロ表示:

    functions,オナホ 高級and price tag factors,

  2. like telling me what to wear to work.And when I revealed that he had a wife,ラブドール えろ

  3. Natasha表示:

    Asking questions are in fact good thing if you are not understanding something fully,
    but this paragraph provides nice understanding even.

  4. A month after her release,police caught the two together and she was sentenced to seven years in prison.高級 ラブドール

  5. 人形 エロ表示:

    ラブドール おすすめIn fact,pet ownership increased during the pandemic and shows no meaningful signs of slowing down.

  6. “We have all been socialized that the ass is a ‘dirty’ place,人形 セックスmeaning that many of

  7. We sincerely apologize for this terrible encounter.人形 セックスWhen you’ve got been blocked by mistake,

  8. オナドールare what your partners need you to provid Sex should be a fun adventure that allows partners to explore and expand their sexual connection,not just a repetition of the same old,

  9. えろ 人形表示:

    人形 エロThe place is coyly flirtatious and grotesquely blunt—simultaneously Prince Charming and drunk frat boy.Whichever your preference,

  10. A true doll will allow you to launch all your every day destructive Electricitytake it easy,人形 セックスBelieve improved,

  11. 高級 ラブドールhow they compensate to give their same-age sex partners sexual satisfaction.In my previous post I described early erotic memories that were the result of boys having lustful attractions and penile stimulation.

  12. very close to joining the mile high club),we finally got home,ラブドール えろ

  13. They often lack empathy,ラブドール おすすめdisregarding the feelings and needs of others in pursuit of their goals and desires.

  14. ラブドール エロWe may be holding back for fear that if we showed parts of ourselves we don’t care for,our partner might be turned off.

  15. Roosevelt表示:

    Quality posts is the main to be a focus for the visitors to pay a
    quick visit the site, that’s what this web page is providing.

  16. it may eventually lead to thoughts like “My writing isn’t nearly this good; how am I supposed to keep up?” or “When my boss reads my report,ダッチワイフhe’ll realize I don’t have what it takes for this job.

  17. including a slot-machine bank souvenir for our son.Before getting back in the car,人形 エロ

  18. When we’re infatuated,ラブドール エロeverything looks wonderful and perfect.

  19. 人形 エロ表示:

    and self-absorption.The opposite of passive-aggressiveness is compassionate assertiveness.ラブドール エロ

  20. You might even turn this into a recreational research project as you seek ways to grow.Many of us have fallen madly in love,ラブドール 中古

  21. 高級 ラブドールHis request was granted.The couple married in 2005 and had another child.

  22. オナドール Sexual orientation or gender identity.Sexual behavior (other than sexual orientation).

  23. オナホ 高級negatively or even violently.So it may well be that for Ms.

  24. many expressed that sex to men was often an act of conquest and hate.Unlike incels,高級 ラブドール

  25. which is the fruit of desire,ラブドール おすすめand the source of all suffering.

  26. pleasure-based sex education and consent in schools and at home.Just because the liberal media is all about anal now shouldn’t suggest that anal is an automatic given when you hook up or that young people have learned how to engage in butt stuff safely.人形 セックス

發佈留言

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