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

  1. FrankMar表示:

    paxlovid cost without insurance: paxlovid india – paxlovid buy

  2. RobertAcele表示:

    https://ivermectinpharm.store/# Ivermectin Pharm

  3. ความปรารถนา ในการ ทำ
    “หวยลาว” เป็นหนึ่งในกิจกรรมยอดนิยมในประเทศไทย โดยผู้คนจำนวนมากมักจะ หลงไหล ในการ พนัน ด้วยความหวังที่จะได้รับ ความร่ำรวย และ ปรับเปลี่ยน ชีวิตของตนเอง

    “หวยลาว” เป็นการ เล่น ที่ถูกกฎหมายในประเทศลาว และได้รับความนิยม อย่างมากในหมู่ชาวไทย โดยเฉพาะอย่างยิ่งในช่วงเทศกาลสำคัญ ๆ เช่น วันสงกรานต์ วันขึ้นปีใหม่ และช่วงก่อนการออกรางวัลใหญ่ของ”หวยลาว” ผู้คนจะ ต่างเล่น เพื่อลุ้นรับ เงินก้อนโต
    ที่จะ ปรับปรุงให้ดีขึ้น ชีวิตของพวกเขา

    อย่างไรก็ตาม การ ทำ “หวยลาว” ก็ไม่ปราศจากปัญหา
    เนื่องจากบางคนอาจติด
    การพนันและใช้เงินมากเกินไป ส่งผลให้เกิด ปัญหาตามมา นอกจากนี้ การ ซื้อ “หวยลาว” ยังอาจเป็นช่องทางให้คนบางกลุ่ม ทำผิด
    โดยมิชอบ ด้วยการ ปล้น รางวัลของผู้ชนะ

    แม้ว่าการ พนัน “หวยลาว” จะเป็นกิจกรรมที่ถูกกฎหมายและ เป็นที่หลงใหล ในหมู่ คนไทย
    แต่ควรมีการ ตัดสิน อย่างใกล้ชิดเพื่อ ยับยั้ง ปัญหาที่อาจ เกิดขึ้นได้ ทั้งนี้ เพื่อให้การ ทำ “หวยลาว”
    เป็นเพียงการเสี่ยงโชค เท่านั้น และ ไม่ส่งผลเสีย
    ต่อ การเงิน ของผู้เล่น

    Here is my webpage: เว็บคาสิโนออนไลน์ที่มีโปรโมชั่นและกิจกรรมพิเศษมากมายให้สมาชิกได้รับสิทธิพิเศษตลอดการเล่นเกม; idea.informer.com,

  4. FrankMar表示:

    Ivermectin Pharm Store: Ivermectin Pharm Store – Ivermectin Pharm

  5. Edwardwhogy表示:

    Gabapentin Pharm drug neurontin neurontin cap

  6. Related Site表示:

    Write more, thats all I have to say. Literally, it seems as though
    you relied on the video to make your point. You definitely know what youre talking about, why waste your intelligence on just posting videos to your weblog when you could be
    giving us something enlightening to read?

  7. BrianRak表示:

    [url=https://vanille.by/]
    Добро пожаловать в интернет-магазин Vanille.by!
    Несмотря на все изобилие и разнообразие парфюмерии, мы постарались упростить задачу поиска и выбора нужных духов. Здесь вы сможете найти парфюмерию разной концентрации на все случаи жизни.

    На сайте представлены ведущие люксовые бренды от Bvlgari, Chanel, Estee Lauder, Dior, Gucci, Guerlain, Lancome, Trussardi и другие представители не менее популярных домов моды. Ценители ароматов селективных марок оценят парфюм от Byredo, Juliette Has a Gun, Mancera, Memo Paris, Xerjoff, Attar Collection, Vilhelm Parfumerie, Nishane, Vertus и других представителей ниши.

    На сайте Vanille.by размещена парфюмерная продукция, которая имеет только оригинальное происхождение и поступает от официальных представителей. Мы доставляем флаконы во все города и районы Беларуси, чтобы дать возможность жителям самых отдаленных мест Беларуси получить желанных аромат.

    Мы работаем для вас![/url]

  8. HarryAudix表示:

    Ivermectin Pharm Store: Ivermectin Pharm Store – Ivermectin Pharm Store

  9. えろ 服表示:

    quinoa is one of few plant sources of complete protein (meaning it contains all nine amino acids the body requires to build cells).A whole grain that’s technically a seed,ドール エロ

  10. so I’ll offer some of what I know here,エロ コスチュームalong with bottle feeding tips.

  11. steamed and topped with a dash of olive oil,アダルト 下着pureed and added to soups,

  12. ランジェリー エロbut they will happen nonetheless.How we react is important.

  13. Jump on the furniture.Refuse to go to bed.ランジェリー エロ

  14. Items that are particularly dangerous should be stored in much higher locations where they are harder for a child to access.Never leave standing water in the tub or a bucket.エロ コスチューム

  15. or high achieving at school.Conflict of loyalties – they feel they have to choose which parent to support or that they can love only one parent.下着 エロ い

  16. Cording recommends skipping the apple cider vinegar hack,since it could make your symptoms worse.アダルト ランジェリー

  17. .Eat and drink at least four servings of dairy products and calcium-rich foods a day. You need 1,ドール エロ000-1,

  18. it takes another 5-6 days to travel through your fallopian tube and implant itself in your uterus.You’re officially pregnant on about day 21.コスプレ アダルト

  19. among other things.Nine months can be a pretty short time to figure all of those issues out,ベビー ドール エロ

  20. エロ ランジェリーIf we want the best for our children,why don’t we do our best? Is it because we see our children simply as possessions with whom we can do as we wish? Is it because we don’t give them enough time out of our busy day? Is it because we don’t talk to them? Are we too “adult” to say that we love them every now and then? It’s OK when we try,

  21. エロ コスチュームA tether strap doesn’t necessarily make a seat safer than a seat designed without a tether,but if the seat has one it must be used – not using it will risk serious injury to the child,

  22. Convertible seats.Another option is a “convertible” rear/forward-facing seat with an integrated harness.下着 エロ い

  23. Stay awake so you’ll hear the children if they need you.Children will likely try you out to see how far you let them go.エッチ 下着

發佈留言

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