透過網頁讀取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,740 Responses

  1. 10 Healthy Habits For A Healthy Car Keys Replacement Cost
    car key battery replacement Near me

  2. Highly energetic article, I loved that a lot.
    Will there be a part 2?

  3. it would take ETs hundreds or even thousands of years to reach Earth across the vast divide of interstellar space.Thus,ラブドール 高級

  4. ラブドール と はand many leadership educators bring them up in the classroom.on closer consideration,

  5. and how they can use it in ways that are effective,yet not Machiavellian.ラブドール と は

  6. ラブドール セックスparents should expect to continually engage in diverse difficult dialogues with their children.Even ifor when systemic changes are made to minimize or prevent these traumatic or oppressive events,

  7. with many scammers selling toxic,poor-quality counterfeit copies of good-quality sex dolls.ラブドール おすすめ

  8. ラブドール 通販trauma processing* in a safe,supportive environment has a role to play in the journey of trauma integration.

  9. Animals also clearly recognize feelings in other animals—that is,ラブドール 販売they possess what psychologists call emotional intelligence,

  10. near By表示:

    20 Reasons Why Jaguar Key Fob Cannot Be Forgotten near By

  11. Little white lies start adding up,and soon Jules discovers the truth.ダッチワイフ と は

  12. ラブドール と は” “The Matrix”.This misconception is best summarized in the film “The Two Popes,

  13. ダッチワイフand appearance into something not found in nature.Examples of UPFs include frozen meals,

  14. 人形 エロIs that your sense of people who use warmlines—that they want to remain outside of “the system”?The first call she receives is from a character who is newly out of prison and the first thing he says is I just want to talk.And he repeats that when he feels like she’s trying to refer him to [a service] and he says no; I tried that,

  15. this performance may upset you because you experience something very different at home.エロドールThe therapist may mistakenly view your partner as emotionally regulated and you as angry because they only see the dynamics at play in their office.

  16. We had just been at a gay bar.I had just been verbally assaulted with a homophobic slur.ラブドール 動画

  17. リアル ラブドールI primarily treat folks struggling with depression,anxiety,

  18. What Are Other Online Stores Like Amazon Tools To Improve Your Daily Lifethe One
    What Are Other Online Stores Like Amazon Technique Every Person Needs To Know what are other online stores like amazon

  19. But without the vocabulary or voice to talk about what’s happening to her,ラブドール リアルHolly is left to act out behaviors that would leave polite society blushing.

  20. ラブドール 高級and deep,and a new anthology called Animals as Experiencing Entities Theories and Historical Narratives edited by Drs.

  21. the daughter of John Pilley,whose famous border collie,海外 セックス

  22. What Is Motor Vehicle Lawsuit And How To Utilize It
    motor Vehicle accident lawsuit

  23. porn site表示:

    What’s up to all, how is the whole thing, I think every one is
    getting more from this website, and your views are pleasant for new people.

  24. child porn表示:

    You actually suggested it terrifically!

  25. Upvc Repairs Near Me Tools To Help You Manage Your Daily
    Lifethe One Upvc Repairs Near Me Trick That Everyone Should
    Learn Upvc repairs near me

  26. You’ll Never Be Able To Figure Out This Genuine Mitsubishi Key Replacement’s Benefits Genuine Mitsubishi Key Replacement

  27. How Glass.Replacement Near Me Propelled
    To The Top Trend In Social Media Upvc windows glass replacement

發佈留言

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