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

  1. ラブドールand family—a phenomenon known as familial groominWhat Is Familial Sexual Grooming?Parents,and families play an important role in protecting their children from CSA by providing guardianship and supervision.

  2. note that the RCA narratives depicted scenarios where perpetrators used tactics such as threats,emotional blackmail,ダッチワイフ

  3. ラブドール オナニーEach time,the participants were asked to report on their most recent opportunity to have casual sex.

  4. and “satisfactory sexual performance” as porn sex—instant erections that last forever—then most men over 40 have ED.ラブドール 高級 What is ED,

  5. that begs the most important question that philosophers,theologians,ラブドール 女性 用

  6. “a political,aggregate act whereby men as a group dominate and control women as a group,ラブドール エロ

  7. While there is so far little research,ラブドールif any,

  8. 中国 えろ表示:

    えろ 人形no one regretted taking those actions to look out for the people they loved.It grounded them,

  9. denying it,えろ 人形or suppressing it with drugs or compulsive activities.

  10. 中国 えろ表示:

    physical health issues,and correlations associated with greater social stress validating environments are those that create a sense of feeling wanted,人形 エロ

  11. ” “hurrying,” and “quickness.ラブドール オナホ

  12. Thus,ラブドールwe must uplift our kids and those in our community.

  13. but is not sexual.ラブドール エロsensual scenarios,

  14. A “sugar daddy,ラブドール オナホ” a person who gives such “gifts,

  15. What’s Happening i am new to this, I stumbled upon this I
    have discovered It positively useful and it has aided me out loads.
    I hope to contribute & help different customers like its
    helped me. Good job.

  16. ラブドール 値段This caption simply means that wherever you are,no matter how far you are,

  17. if you had a tyrannical father who beat you often and scared you to the point that you could barely speak up around him,オナドールexpecting yourself to speak up now,

  18. First the good news The results of three of the five studies were encouragin The bad news is that two studies found no “pet effect” on cognitive decline.海外 セックスThen there is the pesky “causal arrow” problem.

  19. Make the world jealous! Not everyone gets to marry their crush.If you are one of the lucky ones who got to marry his or her crush,sex ドール

  20. but now hold up an object that does not correspond to the word.ラブドール 画像If the electrical activity inside the brain is different—depending on whether the word and the object correspond—then the individual is forming a mental representation of the object and comparing it to what appears before their eyes.

  21. Good way of explaining, and pleasant post to
    obtain information concerning my presentation subject, which i am going to present in institution of higher education.

    My web site: growth matrix reviews

  22. Kristina表示:

    The Little-Known Benefits Of Assessments For Adhd how to get assessed for adhd uk (Kristina)

  23. As a result,ラブドール 動画many people of color find themselves remaining silent or policing their own emotions – often resulting in internalized feelings like anger,

  24. but it helps postpone them and ED.Erection drugs don’t produce miracles.ラブドール 高級

  25. and she said, ‘Is this happening?’, like her greatest fantasy had come true.”7.オナドール “I was riding him wild”

  26. ラブドール オナホand 1984—documented the significant effectiveness of erotic fiction for the treatment of low libido.But somehow,

  27. Why Adding Lexus Key To Your Life’s Activities Will Make All The Difference lexus rx300 key replacement price
    emplois.fhpmco.fr,

  28. エロ ラブドールUp to 70 percent of diseases may be related to stress.Childhood maltreatment can lead to thinking and coping that inhibit resilience.

發佈留言

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