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

83,486 Responses

  1. Профессиональный сервисный центр по ремонту автомагнитол в Москве.
    Мы предлагаем: сервис центр ремонта магнитол
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  2. Профессиональный сервисный центр по ремонту планшетов в Москве.
    Мы предлагаем: ремонт стекла планшета
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  3. on the border with Thailand.Intermediate stations will help open up to visitors parts of the country that haven’t historically benefited from tourism,セクシー下着

  4. エロ 人形表示:

    The Steamboat Grand has on-site restaurants,エロ 下着a hot tub,

  5. エロ ランジェリーa romantic dinner,and a 60-minute Swedish massage for two.

  6. セクシー下着and temples along the way — plus stunning natural scenery and seemingly endless views.As part of its reopening,

  7. 人形 エロ表示:

    t バックBook a stay at Congress Hall,especially if you have kids.

  8. it is only fitting that we shoot for perfection in order to make our guests’ experiences memorable,ランジェリー エロ” he tells T+L.

  9. I have been exploring for a little bit for any high-quality articles or weblog
    posts in this sort of house . Exploring in Yahoo I at last stumbled
    upon this web site. Studying this information So i am satisfied to
    express that I have a very good uncanny feeling I discovered exactly what
    I needed. I so much indisputably will make certain to do not forget this web site and provides it a look regularly.

  10. and kayak rentals.If you’re looking for a charming,セクシーコスプレ

  11. Jeremypag表示:

    buy ozempic pills online buy ozempic buy cheap ozempic

  12. You’ll Never Be Able To Figure Out This Compact Electric Scooters’s Secrets Compact electric Scooters

  13. Если вы хотите придать уникальность своему автомобилю и обновить внешний вид, то на сайте baikalwheels.ru у вас есть возможность купить диски в воронеже популярных мировых брендов. В каталоге представлены такие производители, как Replika, Nitro, Legeartis и K&K, которые имеют отличную репутацию. Размеры варьируются от 16 до 22 дюймов, что позволяет подобрать идеальные диски для любых автомобилей — от седанов до внедорожников.

  14. 15 Tips Your Boss Wished You Knew About Upvc Doors
    Panels Replace glass panel In upvc Door

  15. HaroldBig表示:

    semaglutide tablets: rybelsus pill – semaglutide cost

  16. the region oozes with romantic char There are many great hotels in Napa Valley,but we recommend the Harvest Inn in St.エロ ランジェリー

  17. 人形 エロ表示:

    the whole city is lit up with impressive displays,and family-friendly festivities are on offer every weekend from Thanksgiving through Christmas.t バック

  18. with settlements dating back to the 1600s.t バックWinter is a festive time to explore its 10-acre time capsule,

  19. 人形 エロ表示:

    The food and the dramatic landscapes are also a great way to treat yourself as you walk into a new world,アダルト 下着” she adds.

  20. including some hosted by local surf icon Tereva David.セクシー下着Those more comfortable watching the waves than riding them can get on the water with tour companies such as Teahupo’o Tahiti Surfari,

  21. えろ 人形表示:

    which opened this past summer 2022 with an off-grid solar power system and a commitment to honor UNESCO’s Sustainable Travel Pledge.ランジェリー ショップA total solar eclipse,

  22. For a unique adventure that embraces the hot and cold,セクシーコスプレplan a trip to the Granite Hot Springs Pool,

  23. 人形 エロ表示:

    bringing their visions to life often comes with a unique set of challenges.”Being Chinese and an immigrant,ランジェリー エロ

  24. エロ 人形表示:

    アダルト 下着The South has plenty of small towns and historic cities that are ideal for a romantic getaway,but Charleston’s charming streets,

  25. thanks to shows at the well-established National Gallery of the Cayman Islands as well as the vibey,creative atmosphere at new hotels such as Palm Heights,セクシー下着

  26. ランジェリー ショップwhich is just a short connecting hop from Coyhaique,the gateway to Aysén.

  27. 人形 エロ表示:

    セクシーコスプレski-out access.If your idea of a white Christmas involves soft,

發佈留言

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