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

59,255 Responses

  1. ラブドール 中古even if they didn’t necessarily agree with their own partners.The fact that they were still together appears to provide a positive endorsement of the concept,

  2. 高級 オナホThere is always the chance that your husband will change his behavior after he or someone who he cares about experiences a health scare.Ultimately,

  3. ダッチワイフbut what makes imposter syndrome so stubborn is that it can just as easily show up for a person who has already experienced plenty of success in their role.Any number of factors might play a role in someone feeling like a fraud in their environment—individual personality,

  4. ラブドール おすすめand the phenomenon of near-death experience NDE for 50 years,this view is incorrect.

  5. These types of dolls are entirely Harmless and extremely resilient and can be employed for a long period.人形 セックスHow a few years the urdolls doll may be used will depend on the ailment of use and treatment.

  6. and strengthen person fulfillment and practical experience.人形 セックスWe could affirm,

  7. However firm our resolve feels,高級 オナホit isn’t,

  8. Is it more important for women than it is for men to marry? Does the experience of remaining single vary for the two sexes? Does the impact of sexual frequency and satisfaction contribute to these sex differences? I might also add that as best as I can determine,these findings do not necessarily apply to same-sex marriages.オナホ ラブドール

  9. 海外 せっくす” causing his new wife to say,”Excuse me?”Sitting around the bar for Sexual Feud,

  10. In cuckolding scenarios,オナホ ラブドールthere’s usually a BDSM element involved.

  11. ラブドール おすすめdifficulty finishing assignments,and engaging in activities quietly,

  12. セックス ドールgood idea.is soulmate sketch realAdmiring the time and effort you put into your blog and in depthinformation you provide.

  13. RobertAcele表示:

    https://gabapentinpharm.com/# canada where to buy neurontin

  14. functions,and price tag factors,ラブドール エロ

  15. For example,ラブドール エロyou moved to a different city,

  16. In case you have Specific needs that are not out there from the shown alternatives, we will Test with enjoyment what is possible: Watch Speak to form.

  17. Here is what he wrote in his brief foreword to my book: “The daimonic (unlike the demonic,ラブドール エロwhich is merely destructive),

  18. I do not understand who you’re but certainly you are going to a famous blogger in the event youare not already.Cheers!nice content,セックス ドール

  19. ( his groundbreaking book The Meaning of Anxiety, in which he normalizes the experience of existential anxiety.オナホ 高級

  20. 人形 エロI thought,I will wear white sleeveless sweaters and jewel tone dresses.

  21. or to dive into that yoga class you’ve had your eye on.リアル ドールThat comes to a halt though if the idea of being in a gym now fills you with anxiety.

  22. In case you have been blocked by error, be sure to Get hold of us! Make sure オナホ 高級you include your IP address in order that we could whitelist it.

  23. and literature explore themes of sexual diversity and liberation,ラブドール オナホaudiences become more accepting and understanding of different expressions of sexuality.

  24. This post is for informational purposes only.it is not intended to be a substitute for help from a qualified health professional.ラブドール おすすめ

  25. リアル ドールWhile New Year’s resolutions have their challenges—raise your hand if you’ve said the phrase “I’ll try again next year” about a resolution at some point—many people are able to successfully get their resolutions off the ground come January.The looming presence of the COVID-19 pandemic continues to leave its mark on our lives,

  26. リアル ドールOn the other hand,a person might put up a video of their provider giving valuable insight or helping them talk through a difficult issue,

  27. I’ve decided not to see this as a failed experiment at all,ダッチワイフbut another reason to feel empowered by my body.

  28. the BDSM element is not present.I was talking about cuckolding during an LGBT presentation,オナホ ラブドール

發佈留言

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