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

93,405 Responses

  1. An Easy-To-Follow Guide To Buy Wheel Loader Driving License
    Online KöPa Hjullastare Körkort Online

  2. 20 Interesting Quotes About Conservatory Door Lock Repair conservatory door lock repairs

  3. 海外 エロ表示:

    Your focus on practical application,supported by real-world examples,ダッチワイフ

  4. and features,Each product page is equipped with detailed descriptions and high-resolution images,中国 エロ

  5. ensuring both durability and a realistic touch.providing natural and fluid movements that enhance the doll’s lifelike appearance.美人 セックス

  6. 中国 えろ表示:

    Your ability to present a comprehensive analysis while maintaining clarity and coherence is truly commendable.ダッチワイフYour comprehensive analysis has greatly enriched my understanding of [specific topic],

  7. or require assistance with any other aspect of your purchase,the customer service team is always ready to assist.ラブドール えろ

  8. exceptional customer service,リアル ドールcom is redefining realism with precision and care,

  9. ラブドール えろdetailed instructions,making it accessible for everyone,

  10. ラブドール えろThis level of dedication to customer satisfaction is a major factor that sets com apart from other retailers and contributes to their excellent reputation in the industry.Shopping on com is designed to be secure,

  11. which added a personal touch that made the topic more relatable and impactful.Your ability to connect your experiences with broader themes and insights is a rare talent.ラブドール

  12. Your ability to delve into the nuances of the subject and present them in a clear,ラブドールorganized manner is remarkable.

  13. The quality of your writing in this article is exceptional.Each paragraph was crafted with precision,ラブドール

  14. making complex concepts easy to grasp and apply.Your clear writing style,ラブドール

  15. 衣装 えろ表示:

    ensuring both durability and a genuine touch.リアル ドールThe joints are designed to move smoothly,

  16. Your analysis has significantly enhanced my understanding of [specific topic],ダッチワイフand I am eager to delve deeper into the subject with the insights you’ve provided.

  17. さらに、comは常に革新を追求しており、新しいドールや機能、カスタマイズオプションを定期的に追加しています.セックス ドールこれにより、顧客からの高い評価と満足度が維持され、サイトが提供する製品とサービスの質の高さが際立っています.

  18. with lifelike skin texture and finely detailed facial features.ensuring durability and a realistic feel.ラブドール エロ

  19. セックス ドールカスタマイズのプロセスは非常に簡単で、直感的なガイドとサポートが提供されているため、初めてドールを購入する人でも安心して楽しめます.comのドールは、業界内で非常に高い評価を得ています.

  20. ダッチワイフYour work has greatly enhanced my understanding of [specific topic],Your article on [specific topic] was incredibly engaging and insightful.

  21. 海外 エロ表示:

    lifelike doll.中国 エロFirst and foremost,

  22. ラブドールThank you for sharing such a creative and thought-provoking piece.Your work has not only broadened my perspective but also inspired me to think more innovatively about [specific topic].

  23. and the clarity with which you explained these ideas made them accessible and easy to understand.ラブドールThe engaging nature of your writing,

  24. The blog is well-optimized for search engines,with relevant keywords seamlessly integrated into the content.ラブドール エロ

  25. ensuring that the website is mobile-friendly,and providing transcripts for any audio or video content.ラブドール エロ

  26. ラブドール エロenhancing the overall reader experience.To further improve,

  27. ラブドールmaking it easy for me to apply your insights to my own work.actionable steps that I could easily incorporate into my projects.

  28. えろ 人形表示:

    美人 セックスmaking it easy to design a doll that perfectly fits my preferences.The level of realism is astonishing,

  29. ラブドール えろgiving you peace of mind while you shop.The checkout process is streamlined and straightforward,

  30. was impressive.ラブドールI particularly appreciated how you integrated various perspectives and provided a nuanced analysis that added depth to the article.

發佈留言

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