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

46,584 Responses

  1. porn表示:

    Right away I am ready to do my breakfast, after having my breakfast coming over again to read additional news.

  2. Greetings! This is my first visit to your blog!
    We are a group of volunteers and starting a new initiative in a
    community in the same niche. Your blog provided us beneficial
    information to work on. You have done a extraordinary
    job!

  3. การตลาดออนไลน์คุณภาพที่เหมาะกับคุณ Bounce Online ให้บริการดิจิทัลที่มีประสิทธิภาพ เช่น SEO การสร้างเนื้อหา การออกแบบเว็บ และอื่นๆ ให้เราช่วยให้คุณเข้าถึงลูกค้าได้มากขึ้นและเพิ่มผลลัพธ์ทางธุรกิจของคุณด้วยทีมงานมืออาชีพของเรา

    Here is my website – คาสิโนออนไลน์ออโต้ (squareblogs.net)

  4. When some one searches for his vital thing, so he/she
    wants to be available that in detail, therefore that thing is maintained over here.

  5. Triangle Billiards & Bar Stools
    1471 Nisson Ꭱd, Tustin,
    ᏟA 92780, United Stɑtes
    +17147715380
    Triangle Billiards Installation

  6. pepek becek表示:

    Attractive section of content. I just stumbled
    upon your site and in accession capital to assert
    that I acquire actually enjoyed account your blog posts.
    Any way I’ll be subscribing to your feeds and even I achievement you access consistently
    fast.

  7. I go to see day-to-day some websites and blogs to read posts, but this weblog provides quality based content.

  8. Hey very cool web site!! Guy .. Excellent .. Superb ..
    I will bookmark your web site and take the feeds additionally?
    I’m satisfied to find so many useful information here within the put up, we’d like work out extra strategies
    on this regard, thanks for sharing. . . . . .

  9. Slot Gacor表示:

    When I originally commented I clicked the “Notify me when new comments are added” checkbox and now each time
    a comment is added I get three emails with the same comment.
    Is there any way you can remove people from that service?
    Thanks a lot!

  10. ไมโครเกมมิ่ง (Microgaming) เป็นบริษัทผู้พัฒนาซอฟต์แวร์เกมที่มีชื่อเสียงในวงการคาสิโนออนไลน์ ไมโครเกมมิ่ง
    (Micro Gaming) ได้สร้างเกมคาสิโนออนไลน์ที่ได้รับความนิยมอย่างแพร่หลาย เช่น เกมสล็อต รูเล็ต และบาคาร่า ไมโครเกมมิ่ง (Microgaming) เป็นบริษัทที่มีความเชี่ยวชาญในการสร้างเกมส์ที่มีกราฟิกสวยงาม และคุณภาพเสียงที่ดี ถ้าคุณกำลังมองหาประสบการณ์การเล่นคาสิโนที่สนุกและมีคุณภาพ ไมโครเกมมิ่ง (Microgaming) คือตัวเลือกที่ดีที่สุด!

    Also visit my site: วิธีเล่นคาสิโนออนไลน์

  11. Paito HK表示:

    Actually no matter if someone doesn’t be aware of then its up to other viewers that they will help, so here it occurs.

  12. bokep barat表示:

    We are a group of volunteers and starting a new scheme in our community.
    Your web site offered us with valuable information to work on. You
    have done an impressive job and our entire community will be grateful to you.

  13. Seo – How A Blog Comes Up First On-Line 구글 검색엔진최적화, kendall6monthortho.com,

  14. If some one wants expert view about running a blog then i recommend him/her to go to see this blog,
    Keep up the fastidious job.

  15. Ye is a powerhouse in the music industry. His artistic vision has no limits, seen in his diverse body of work.
    Each record is a testament to his evolution as an artist.
    From “Graduation” to “Jesus Is King”, he keeps innovating.

    Outside of music, Mr. West’s reach is felt in fashion and
    the cultural landscape. His collaborations with major fashion houses and his
    own Yeezy line have changed the sneaker industry.

    People are always eager to what he’ll do next.

    Mr. West is notable for his fearless opinions and high-profile incidents.
    Whether you agree with him or not, it’s undeniable his influence on popular
    culture. He generates discussion and makes people think, which is crucial for innovation.

    Moreover, his philanthropy often goes unnoticed.
    Ye has given to numerous charities, proving his commitment to helping others.

    In summary, Ye is more than just a musician with an enduring influence.
    Whether you love or hate his music, there’s no denying that he has left an indelible
    mark the cultural zeitgeist.

  16. 5 Laws That Will Help In The Wood Fire Stove Industry http://www.913875.xyz

  17. bokep hd表示:

    Hi there, just wanted to tell you, I enjoyed this blog post.
    It was inspiring. Keep on posting!

  18. link bokep表示:

    Good day! I know this is kinda off topic
    but I was wondering which blog platform are you using for this site?
    I’m getting sick and tired of WordPress because I’ve had issues with hackers and I’m looking at options for another platform.
    I would be fantastic if you could point me in the direction of a good platform.

  19. The No. 1 Question Everyone Working In Taking Care Of Pets Needs To Know How To Answer
    http://www.836614.xyz

  20. abati.ru表示:

    Interesting blog! Is your theme custom made
    or did you download it from somewhere? A design like yours with a few simple tweeks would really make my blog stand out.
    Please let me know where you got your theme.
    Kudos

  21. java burn表示:

    Simply wish to say your article is as astounding. The clearness in your post is simply nice and i can assume
    you’re an expert on this subject. Fine with your permission allow me to grab your feed to keep up to date with forthcoming post.
    Thanks a million and please carry on the gratifying work.

  22. Marty表示:

    What Do You Need To Know To Be Prepared For Asbestos Attorneys Marty

  23. Jude表示:

    This Is The History Of Play Slots Online In 10 Milestones Jude

  24. Scottnaigh表示:

    Find the latest information on Khabib Nurmagomedov https://khabib-nurmagomedov.uz news and fights. Check out articles and videos detailing Khabib UFC career, interviews, wins, and biography.

  25. Great article, exactly what I wanted to find.

  26. Its like you learn my mind! You seem to know so much about this, such
    as you wrote the e-book in it or something. I
    think that you just could do with some p.c. to pressure the message home a little bit,
    however instead of that, this is great blog. An excellent read.
    I’ll certainly be back.

  27. download porn表示:

    I am sure this paragraph has touched all the internet viewers, its really really nice post on building up new blog.

  28. 913875.xyz表示:

    A Peek Inside Multi Fuel Stove’s Secrets Of Multi Fuel Stove 913875.xyz

發佈留言

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