File size: 3,793 Bytes
83e896c
 
 
 
 
 
 
8d9b6ea
 
83e896c
 
 
 
 
 
 
 
 
 
 
 
 
ba93915
 
 
 
 
83e896c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ba93915
 
 
83e896c
 
 
ba93915
 
 
83e896c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59c42fa
 
 
83e896c
ba93915
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83e896c
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Transformers.js - Background Removal</title>
  <script type="module" crossorigin src="/assets/index-E_M5nW8h.js"></script>
  <link rel="stylesheet" crossorigin href="/assets/index-SojaDS6z.css">
  <style>
    #drop-zone {
      border: 2px dashed #ccc;
      border-radius: 10px;
      padding: 20px;
      text-align: center;
      margin-top: 20px;
    }

    #drop-zone.dragover {
      background-color: #e8f0fe;
      border-color: #0b84ff;
    }
    
    #download-button {
      margin-top: 20px;
      display: none;
    }
  </style>
</head>

<body>
  <h1>Background Removal w/ <a href="http://github.com/xenova/transformers.js" target="_blank">🤗 Transformers.js</a></h1>
  <h4>Runs locally in your browser, powered by the <a href="https://huggingface.co/briaai/RMBG-1.4" target="_blank">RMBG V1.4 model</a> from <a href="https://bria.ai/" target="_blank">BRIA AI</a></h4>
  
  <div id="container">
    <label id="upload-button" for="upload">
      <svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
        <path fill="#000" d="M3.5 24.3a3 3 0 0 1-1.9-.8c-.5-.5-.8-1.2-.8-1.9V2.9c0-.7.3-1.3.8-1.9.6-.5 1.2-.7 2-.7h18.6c.7 0 1.3.2 1.9.7.5.6.7 1.2.7 2v18.6c0 .7-.2 1.4-.7 1.9a3 3 0 0 1-2 .8H3.6Zm0-2.7h18.7V2.9H3.5v18.7Zm2.7-2.7h13.3c.3 0 .5 0 .6-.3v-.7l-3.7-5a.6.6 0 0 0-.6-.2c-.2 0-.4 0-.5.3l-3.5 4.6-2.4-3.3a.6.6 0 0 0-.6-.3c-.2 0-.4.1-.5.3l-2.7 3.6c-.1.2-.2.4 0 .7.1.2.3.3.6.3Z"></path>
      </svg>
      Click to upload image
      <label id="example">(or try example)</label>
    </label>
  </div>

  <!-- Drop Zone for Drag and Drop -->
  <div id="drop-zone">Drag and drop an image here, or click to select a file</div>
  <label id="status"></label>
  <input id="upload" type="file" accept="image/*" style="display: none;" />

  <!-- Download Button -->
  <button id="download-button">Download Image</button>
  
  <script>
    const dropZone = document.getElementById('drop-zone');
    const fileInput = document.getElementById('upload');
    const downloadButton = document.getElementById('download-button');
    const container = document.getElementById('container');
    
    dropZone.addEventListener('click', () => {
      fileInput.click();
    });

    dropZone.addEventListener('dragover', (event) => {
      event.preventDefault();
      dropZone.classList.add('dragover');
    });

    dropZone.addEventListener('dragleave', () => {
      dropZone.classList.remove('dragover');
    });

    dropZone.addEventListener('drop', (event) => {
      event.preventDefault();
      dropZone.classList.remove('dragover');
      const files = event.dataTransfer.files;
      fileInput.files = files;
      // Manually trigger the change event
      const changeEvent = new Event('change', { bubbles: true });
      fileInput.dispatchEvent(changeEvent);
    });
    // Observe changes to the container's background image
    const observer = new MutationObserver(() => {
      const backgroundImage = container.style.backgroundImage;
    
      // Extract the URL from the background-image style
      const match = /url\(["']?([^"']*)["']?\)/.exec(backgroundImage);
      if (match && match[1]) {
        const imageUrl = match[1];
        
        // Set the download button href to the background image URL
        downloadButton.setAttribute('href', imageUrl);
        downloadButton.setAttribute('download', 'generated-image.png');
        downloadButton.style.display = 'block';
      }
    });
    
    // Configure the observer to watch for attribute changes
    observer.observe(container, { attributes: true, attributeFilter: ['style'] });
  </script>
</body>

</html>