-
Notifications
You must be signed in to change notification settings - Fork 3
/
bannerPhone_Android_S22_Portrait3.htm
263 lines (238 loc) · 29.8 KB
/
bannerPhone_Android_S22_Portrait3.htm
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Smartphone Banner Generator</title>
<style>
html,body{margin:0;padding:0;background-color:white}
canvas{display:none;text-rendering:optimizeLegibility}
div{position:absolute;left:0;right:0;top:0;width:623px}
input[type=file]{height:30px;font-family:Arial;font-size:13px;line-height:30px;vertical-align:top;margin:0;padding:0;box-sizing:border-box}
img{display:inline-block}
</style>
</head>
<body>
<canvas width="720" height="1544" id="myCanvas"></canvas>
<div>
<input type="file" id="screenshot">
<img width="720" height="1544" id="finalResult" alt="banner" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH5AodAgAMo/D8kgAAAAtJREFUCNdj+A8EAAn7A/1jJsWPAAAAAElFTkSuQmCC">
</div>
<script>
window.addEventListener("load", function()
{
// 720x1544 SMARTPHONE IMAGE IN PNG FORMAT
var smartphone = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtAAAAYICAYAAACzdf3NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH5wcXFggRArlHlAAAIABJREFUeNrs3X2wVHX9wPHPWVSegksiaiaYmprZlRydafDiQzXOBKXgGCZqmjUJhaPNpKBApRk6+ptGU0iwmsTQ7EEFFURLUxHN8WEcwD9M1HiWh3vl4gMSst/fH7jr7r17L3vh8nCvr9fMKvfu7tlz9pzd8z7nnj2bRUQKAACgKjlPAQAACGgAABDQAAAgoAEAQEADAICABgAAAe0pAAAAAQ0AAAIaAAAENAAACGgAABDQAAAgoD0FAAAgoAEAQEADAICABgAAAQ0AAAIaAAAEtKcAAAAENAAACGgAABDQAAAgoAEAQEADAICA7qwTlmVZu91/R4cFANCRe6Iw7u3ZVx25uTptQKeU2rTwZllWdl3p/Vsa1o6+YHbGQiL2AaDjhHRHicdCC+1oE6WUmk1zezbXLpuHEZE+aQvrnjxzmi5I1V5XzfUAwJ6zXm/r+rsjrufbOs65XC7y+byA3lNn0PaGduFxdvTxCo9TzYuq6e2EMgB0zDbZkR1lu7oB2rtBKt23owRzpw3olmb4tmZMSwvCzlxAc7lcpJTaNPzdMZ4AwM6P6mrj9ZMy3R1hmnOdZaY0VXjyK8Vzpb3MTYexs2deYS92tcc7lR4z1NKB/I5/BoDO0TRt3dG2p/dZa3vdO8phtmXjHZ+AY6C3d2tme/det+sWToVxaPq4nW0rFQA6Y3/U1dVFXV1dnHjiiRERccghh0RExNKlSyMiYuHChfH000/HI4880inW6bW1tVFTUxP5fL7YKhs2bIhFixZ1/I2DzhjQAwcOjPPPPz+OPPLI6NatW9TX18ezzz4bt99+e2zatKnVhXv48OHxzW9+Mw466KDo0qVLLFu2LGbOnBmzZ89utxfTMcccEz/4wQ8in8/H008/Hffff3+L4zNw4MA477zz4qijjoru3bvH2rVr49///nf87ne/iw8++EA8A8AebMCAATF27NgYOnRo1NTUFH9fOMy00vo7l8vFQw89FFOnTo358+fvtnEfMWJE9O3bN6ZPnx4bN25sczw/+eSTZY1SaJbjjjsulixZUrF7OsohHB0+oJs+0ePGjYvLLrssunbt2uy2S5YsiVGjRsXzzz/f7Lq99tor7rjjjvjGN77RbIFOKcWMGTPiJz/5SYuP25aQfeihh2LQoEERETFt2rQYP3588QVTurf5yiuvjEsvvTS6du3abJz++9//xo9+9KN47rnnysbHMdEAsPu7ZMCAATFu3Lg455xzyn7/yiuvxJw5cyKlFEuWLIkNGzZEbW1t5PP5OPbYY2Po0KHFnsiyLObNmxc/+9nPYuHChbt8Wp555pno1atXfPvb345XX321TZE7aNCgmD17dtne54LTTz89nnnmmeKwsiwr3q4jNUzqLJfvfe97qaGhIdXX16dHH300XXTRRWno0KFp4sSJ6fXXX0/19fVpwYIFqV+/finLsrL73nLLLam+vj6tW7cu3XHHHem8885L3/3ud9ODDz6Y6uvrU0NDQ/r5z39e9biUDj+XyxX/femllxbHsaGhIV133XUV73/hhRem+vr6VF9fn/7xj380m5Z169alBQsWpL59+1Y1Di4uLi4uLi675nLiiSemN954o7gef/nll9M555yT+vTp0+K6ufD7mpqaNHTo0PTAAw8U719fX58uvvjilGVZu63bqxlO4bHr6uqqHu6oUaPSuHHj0uTJk8vGf926dcV/T5kyJY0dOzaNHj26I8/nzrPAPv/886m+vj499thjqWvXrmULyVe/+tW0Zs2aVF9fnyZMmFB2v9ra2rR69epUX1+f/u///q/ZcGfMmJHWrVuXli5dmgYMGNBswbviiivSjTfeWPG60sthhx1WDPnC411//fUtTsu6devSY489lvbee++yaTn11FPLpqU00AW0i4uLi4vLrr8U1rmjR48uhuKbb76ZRo4cWfUwmq7PBw8enJ588snU0NCQ3n777TR58uRdNh0RUYze1gK69PZTpkwp20lYGs9r164t/tzQ0FC8fsqUKQJ6d17q6uqKM+bss88uztTSGXv//fentWvXpscff7zsvtdee21qaGhIS5YsSfvvv3+zYR9wwAFp6dKlFeP7zDPPLC5gv/3tb5stUKX//8tf/pLq6+vTX//617R48eIWA3rQoEHFafnOd75TNg2Ff8+cOTPV19enJ554Qiy7uLi4uLjsAZeRI0cWw/Cpp55KNTU1zW5TW1ubxo4dm2bNmpVmzpyZZs2alWbNmpUmTZqUhgwZ0mKYFkK0pb9c7+ilf//+6Qtf+ELZ4xdit66urk17rOvr69PatWvL9joX/l0a1oWfO+K87jRf5X3cccdFxNbT1j366KMfH59ScizNSy+9FF26dInPf/7zZff94he/GCmlePXVV2PNmjXNhr169ep44YUXIiLi+OOPL7vurbfeii1btkRExKpVq5odC134kMD5558fp512Wrzzzjsxfvz4yOfzFY+hLjxG4fQ1jzzySPnxNh/d58UXX4x8Ph+HHnpos+kEAHa9pUuXRmNjY0ybNi1OPvnkaGxsLF538cUXxxtvvBFPPPFEXHnllTF48ODi5aSTTorRo0fHjBkzYvHixTF27NiyDxyOGTMmJk6cGFmWxYIFC3bKuE+cODGuuuqq6NOnT9mxyJW+wrul0+aW3qZLly7NvrK7dLgd/dS7e3WWhbZ///4REfH222/H+vXrK95m+fLlkVKKnj17xkEHHRQrV66MLMuid+/eERGxbt26Fodf+LRo4XEKnn322RgyZEj069cvHn300bIFo/DvAw44ICZMmBAppbj55pvj9ddfb7YQlp7nuX///pFlWdTX18f69esrLmTLly+PXC4XvXr1is9+9rOxYsWKZrfxgUIA2HXmz59f3LFVUFtbG3/605+K6/Z8Ph+LFi2KOXPmNLvd0KFD49Of/nSMGzcuRo8eHePHj4977rknIiJuu+22mDZtWrt/a1+hFc4666zIsix+/etfbzPSWzunc2u3Kfyuo377YKcM6B49ekSWZfH+++8XF4bSKE0pxTvvvFO8/f777x8rV66MlFK89957ERHRt2/fFodfuE0htkvj9KWXXmpxIcmyLH71q19Fv3794qWXXoqbb765eJtKp69JKUWPHj0ipRTvv/9+iwthYVry+Xzsv//+FQNaPAPAztV0r2rptyCPHDkyJk2aFDU1NZFSihtvvDGmTp0aGzZsqLie7t27d4wZMyZGjRoVNTU1MWXKlOjTp09MmzZtp32xStM9wr169WrTNFfz+9b6pKOeQazTHMKxzz77REqp2aERpTNn8+bNxQWkR48ekcttnfzFixdHRMTRRx8d/fr1q7g19ZnPfKYYvaWnjNuW008/Pc4888zYtGlTXHXVVVUF7j777NPs+qaP9eGHH0bE1j+RdO/evcXbAQA7T6UYLOxdHTlyZPTp0ycWLVoUX/va1+KGG26IxsbGFmN4w4YNcf3118fAgQOLp3m77rrrKh5G0d4bAS19y3GlHmlpPKr9luVKndbRGqbD74Fuev7jlr6Su/S6QgQXFvC5c+fG97///ejZs2dcdtllMXHixLL7n3322XHGGWdELpeLzZs3V70g9+nTJ6655pqIiPjDH/4QL774YlULZGH8WtuqK8R/0z+B2OsMAHtGUBe+CGXatGllx0MPGDAghgwZEjU1NVFTUxONjY0xZ86cWLRoUURENDY2xumnnx6jRo2KDRs2VIzWbe21be36I444IiIiXnvtteI4t9Y22zo0o/SxKp33eXueOwG9CxfYamZYYS91aXj+85//jKeeeipOOumkuPjii6Nnz54xd+7c6NmzZ5x22mlx5plnFv8cUziUo+kC0/RY5pRSXH311TFgwIB47bXX4tprr2114a90wH4poQwAHcucOXPKjnWuqamJ6667rvjlKqXr87Fjx8b8+fNj/Pjx8corr0TE1i9baymEtxWylfoiYuvOvSuuuCIitn6wsbVAbktbVYrtzqzDH8JRusVT2HPb0swr3Uu9efPmst9feumlsXjx4ujSpUtccMEFcdddd8Xvf//7GDFiRLz++usxd+7ciIiys3S0tHCmlOJrX/tajBw5Mj788MOYMGFC/O9//6u4YBV+Lg3kwlk9trUQFqZ106ZNDt0AgD1UYR09a9asOOeccyLLsli2bFn8+c9/jttvvz1eeeWVyLIsBg8eHA8++GAMGDCgxVD+1re+FW+88Ua8/PLLUVtb26wXWvpLfMHBBx8cZ511VvFDg60FcEvNUs20dnadZg/0e++9F/l8vngsdCXdunUrztimZ+pYunRpfP3rX48xY8ZEXV1d7LfffvH222/Hv/71r7jlllvivvvui4iIN998s8WIL/y/a9euMWnSpNhrr73i2WefjV69esXw4cPL7rP33ntHxNYzdAwbNiyyLIvZs2fH5s2b4913340sy4q3qRTp3bp1K/68fv16e6QBYA8M59LDIz73uc8VT2d79913l922rq4upkyZUhbPTdXW1satt94avXv3jpqamrjzzjvj1FNPLR4eUk0LFE6PV+k47Eo/Fw4ZbW34pdNZ7V7rpsOsFPMCehdoaGiIiK1/mqgUnFmWxYEHHhgRW/fwlp61onC7d999N2644YZmw/7Upz4VAwcOjIiIp59+utn1dXV1cdBBB8Xf/va3iIg499xz48gjj4yIrd8FP2jQoBYXtmHDhsXw4cMjpRRHHXVU8dR1KaXYd999Ky5gKaWyaVm5cmXFaQYAdp+m6+5TTjklUkqxdOnSZredP39+nHLKKTFgwIBYunRpvPzyyzF//vwYM2ZMRGw9bnrWrFnFM3oUfjdz5swYPnx42THW1YxT6UkRSgO26R7oaj5AWO2HB6sZj46i0wR04Xihbt26xUknnRTz5s1rNqOOOuqoSCnFihUrYuPGjdvcaizc7/LLL48ePXrEmjVr4qGHHio7TU1dXV3cd999kcvl4phjjomrr746NmzYEC+88ELZaeqaLqDHHnts7L333rFixYpYtWpVRER88MEHkVKKhQsXRsTWPdmVpiUiioG+fPny2Lhxo3gGgD1M4fNThfVz4TslCr70pS9F//794+GHH46IrR8eLDTAwQcfXPzuiSzLon///lFTUxOXXHJJTJ48OebPnx8LFy6MkSNHRq9evZoFdKELjj766NiwYUNxx2Fp3zQN/NITLJSGcdPobSmI27r3uelph32IcBfLsiyeeOKJeO+996Jnz54xYsSImDdvXtnMKIR1lmVlZ8No7cD5iIjzzjsvfvjDH0aWZTFjxox49913i7fJ5/Ox7777FkO5cB7pe++9N+69995WF4b//Oc/0bdv35g9e3bZ6e2yLIunnnoq3nnnnejVq1dxWkrHq3v37nHyySdHxMfnoBbPALBnKcRopR6ora2NJ598MlJKMWHChJg6dWqztik1f/78YmdMmTIlUkoxfvz4GD9+fItBu99++8Xll18eq1atKjvDWKXbVgrmbZ0RrFKPtaXdKo1Dh9k46gzxnFKKxsbGmD17dvG0cxdeeGFxZnTv3j2mTp0aBx54YGzZsqXsuKOmxwBlWRaHH354jBgxIu6888646aabonv37jFv3ryYNGlSs5k+a9asuOaaa2Lq1Klx/fXX7/DCkFKK9evXx8MPP1yclgsuuKD4uD169IjbbrstDjzwwPjwww+L0+JDhACwZ6p0nuPS765oeoq7pn1Suic64uOTDWwrTgcMGBDDhg2Liy66qF2no7UYrrZ9fJX3HuQXv/hFHH/88XH44YfHTTfdFGPGjImGhoY47LDDom/fvpFlWfzxj3+Mxx9/vOJCccIJJ8TcuXPLzhedz+fj/vvvj5/+9Kctbn3dcsst7T4tV199dZxwwglx2GGHxU033RQ//vGPo7GxMQ499NDiFuj06dOL09L0WxcBgD0zpCMiFi1aFKeeemoccsghMXv27IiIGDJkSNx1111x9913F48pfuCBB2Lw4MHx5S9/uXjsdOnxyq2d4q7wLc3dunVrdn1rAdv0OzaaHmJR6dS9BZW+ZbmSSueL7kiHcezVmRbGNWvWxPDhw+OXv/xlDBkyJA4//PA44ogjYsuWLfHWW2/F7bffHr/5zW+aDaMQylmWRS6Xi40bN8bKlStj4cKF8fe//73sHI7VfhvP9m7FFaxevTqGDRtWnJbCSc8L102bNq3itAAAHcOiRYuKX54SsfXzXI2NjXHuuedGxNaTFBRuV/rBw7lz58aCBQta3LNdsG7duli1alVs2rSp+LuVK1fGW2+91SxeV69eHVu2bIlVq1YVh/Hmm29G165do6GhoeJhrk3/3djYWDzLR7UKX2ve0fZIZxHRKXdX9unTJ0444YTo3bt3rFixIp577rlWg7dwXdeuXcsWtD1B79694ytf+Ur07t07li9fHs8995x3HQDoBJq2SW1tbTzwwAPFs20sWrQozjjjjKrPstH0818XXHBBbNq0KaZPn168zejRoyNi6zclFm4/atSoyLKs7FjsCy+8MLp37x7Tp0/f5skXIraehezWW2+tajwLZ98YPXp03HPPPR1vvnXWgN7WAtrSzKx0TPTO/HOCs2cAAIUOyefzUVtbG5MnT45ly5bFJZdc0uy7K6o9vdz2tEdhHLa3Z/r379/quawLUkqxfPnyWLZsWYfsoE4X0Nv6vvgdXcjaO3h35LvsxTcAsDP6o619tavHZ7dv7HSGBaDpFk1rp0apNPPbor1nbmvjs62FSTwDwCcneKv9au1tfUCwmoZo+nitfVixvTqurV/GslvnR3SiPdCtbR3tyF7oPWnc2/oCAAD2XNt7yMT2tkVHbDkB3cFm0raiuz2POWrL7R26AQCdu09K7cxDJ7Y13LbugGzLuJXuKGxpWgU0AAB0AjlPAQAACGgAABDQAAAgoAEAQEADAICABgAAAe0pAAAAAQ0AAAIaAAAENAAACGgAABDQAAAgoD0FAAAgoAEAQEADAMBuD+hcZG3o61xkWRZZljW5vqX/7+qWb//tgY+ndeu/c7lcOwwvF1nWpZXH2p3bNZ1jm6p0OS2dhx8v+Lk2zfu2LieftG3uwvNd7eujPZ+jloeVq2r52HrTCsPIZTs8Dlt/v9dHl533HOzq19b2zdfcdj5eR3pyduQ2uRZ+l2uf12uufHlv9hpoy+PksuIwdmS5zkWXTr8uqn4+tX8D5aLyPIrsE/KsVlof5bLtfj6b/pxFRGrbwPKRZVmklLZ5u92zEObb6X5VDCuXReTTbhhf2N2vrY9/bvp+sO33h7YHW+XhFd7M9uzXUKXxb+/naFeNe1vHu7Dy3pFp7SjP1Z6x3mrfbYG0B71m6CQztxMtR7mKGycV99xVG8+7c4XW1sdtbYs/X3FruuznNsdzrk3jm8vt5YXeji+knXWfzrzH+eNpyzdbdluKo9beH7bnuaoUn5XHK7fNx6368XPbv7w0fYzC+Jf+vqPEQVvmbUv3Tymr4n23+nHofPLb+fy073q26Vza9c96rsk8z30i3mN3zwt7T92Q3LnvX+0zTh//LlcYfqU395TSRyurLsUX68cj1PQwhPY4jGPXzZSt01X65O5V8qaUrzwDclnFleHOCvx8/sMOuCelmnmf247hVnfIRUvzJWVt/6vVtl58Wcntcrlc2yOtA2xQtPYcNN0zWc1w2yuGtg4nX/Xrq/Q9bXfs8cjlchWioMsnZG1d/Xyq7j1lT1vHtBCiuaydnq+d9FrPZVF6CGfaY5aT3EfjndrlLxgdfQdGW9cnVd0+6wjvE7v59dvic5oveQmVLaC5khvnyvbyZLF3kxVC0wV+9/05ta3hkhX3jKSPwjkfEVXEaske553xgt694ZVrxxdAvp1fKPmq7vPxPM01W1FEPrWwgtj+Y89SyXzL5/PFDc7Sjaymx0bvKXG9vctvllV6f9h1gdryY+Q++m87RWnVf13KVVj+Km0MN39tpLSlU63o2/t9uvT5qrwCy++kx9yx5yC1eRnayfMgpcq9lE+Rb+Fdsf2erVyr65jKG5H5Fl5Pn7Rjolt/T2n5/bHyZ6nK5mnKtc88z+3YX5d272sj1+p6vXxZrPxZgSw50AgAALZr8xAAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAUliwZAAAf7ElEQVQAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQAAAhoAABDQAAAgoAEAQEADAICABgAAAQ0AAAIaAAAQ0AAAIKABAEBAAwCAgAYAAAENAAACGgAAENAAACCgAQBAQAMAgIAGAAABDQD/397d9cZR3g0c/s/YSoidhEASm8ghUOF8hB5UqlShqjTpCVEpbb9jQCqVUEpRpbYnPe8hBAFpwHZJ0hjI+knIzv0crGc8Ozs7uxs7wetcl4Sw17ubfZl75jcvOwsgoAEAAAENAAACGgAABDQAAAhoAAAQ0AAAIKABAAABDQAAAhoAAAQ0AAAIaAAAENAAACCgAQAAAQ0AAAIaAAAENAAACGgAABDQAAAgoAEAAAENAAACGgAABDQAAAhoAAAQ0AAAIKABAAABDQAAAhoAAAQ0AAAIaAAAENAAACCgAQAAAQ0AAAIaAAAENAAACGgAABDQAAAgoAEAAAENAAACGgAABDQAAAhoAAAQ0AAAIKABAAABDQAAAhoAAAQ0AAAIaAAAENAAACCgAQAAAQ0AAAIaAAAENAAACGgAABDQAAAgoAEAAAENAAACGgAABDQAAAhoAAAQ0AAAIKABAAABDQAAAhoAAAQ0AAAIaAAAENAAACCgAQAAAQ0AAAIaAAAENAAACGgAABDQAAAgoAEAAAENAAACGgAABDQAAAhoAAAQ0AAAIKABAAABDQAAAhoAAAQ0AAAIaAAAENAAACCgAQAAAQ0AAAIaAAAENAAACGgAABDQAAAgoAEAAAENAAACGgAABDQAAAhoAAAQ0AAAIKABAAABDQAAAhoAAAQ0AAAIaAAAENAAACCgAQAAAQ0AAAIaAAAENAAACGgAABDQAAAgoAEAAAENAAACGgAABDQAAAhoAAAQ0AAAIKABAAABDQAAAhoAAAQ0AAAIaAAAENAAACCgAQAAAQ0AAAIaAAAENAAACGgAABDQAAAgoAEAAAENAAACGgAABDQAAAhoAAAQ0AAAIKABAAABDQAAAhoAAAQ0AAAIaAAAENAAACCgAQAAAQ0AAAIaAAAENAAACGgAABDQAAAgoAEAAAENAAACGgAABDQAAAhoAAAQ0AAAIKABAAABDQAAAhoAAAQ0AAAIaAAAENAAACCgAQAAAQ0AAAIaAAAENAAACGgAABDQAAAgoAEAAAENAAACGgAABDQAAAhoAAAQ0AAAIKABAAABDQAAAhoAAAQ0AAAIaAAAENAAACCgAQAAAQ0AAAIaAAAENAAACGgAABDQAAAgoAEAAAENAAACGgAABDQAAAhoAAAQ0AAAIKABAAABDQAAAhoAAAQ0AAAIaAAAENAAACCgAQAAAQ0AAAIaAAAENAAACGgAABDQAAAgoAEAAAENAAACGgAABDQAAAhoAAAQ0AAAIKABAAABDQAAAhoAAAQ0AAAIaAAAENAAACCgAQAAAQ0AAAIaAAAENAAACGgAABDQAAAgoAEAAAENAAACGgAABDQAAAhoAAAQ0AAAIKABAAABDQAAAhoAAAQ0AAAIaAAAENAAACCgAQAAAQ0AAAIaAAAENAAACGgAABDQAAAgoAEAAAENAAACGgAABDQAAAhoAAAQ0AAAIKABAAABDQAAAhoAAAQ0AAAIaAAAENAAACCgAQAAAQ0AAAIaAAAENAAACGgAABDQAAAgoAEAAAENAAACGgAABDQAAAhoAAAQ0AAAIKABAAABDQAAAhoA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";
// LOADING THE SMARTPHONE IMAGE
var image1 = new Image;
image1.onload = update; // CALLING THE UPDATE FUNCTION WHEN THE IMAGE IS LOADED
image1.src = smartphone;
// GETTING ALL THE ELEMENTS IN THE WEB FORM
var canvas = document.getElementById("myCanvas");
// CLEARING ALL THE INPUTTED VALUES (IF ANY)
document.getElementById("screenshot").value = null;
// USING A VARIABLE IN ORDER TO KNOW WHEN ALL THE GRAPHICAL ELEMENTS ARE LOADED
var elementsLoadedCounter = 0;
function update()
{
// INCREASING THE ELEMENT LOADED COUNTER
elementsLoadedCounter++;
// CHECKING IF THE RIGHT AMOUNT OF ELEMENTS ARE LOADED
if (elementsLoadedCounter < 1)
{
// IF NOT, RETURNING WITHOUT EXECUTING ANYTHING ELSE
return;
}
// GETTING THE CONTEXT
var context = canvas.getContext("2d");
try
{
// CREATING THE FILEREADER
var filereader = new FileReader();
// GETTING THE EXTENSION
var extension = document.getElementById("screenshot").files[0].name.split(".").pop().toLowerCase();
// CHECKING THE EXTENSION IN ORDER TO KNOW IF THE FILE IS AN IMAGE
if (extension=="jpg" | extension=="jpeg" | extension=="png")
{
// SETTING WHAT WILL HAPPEN WHEN THE FILE IS LOADED
filereader.onload = function()
{
// DRAWING THE SMARTPHONE
context.drawImage(image1, 0, 0, 720, 1544);
// LOADING THE IMAGE FILE
var image2 = new Image;
image2.onload = function()
{
try
{
// GETTING THE IMAGE RATIO
var ratio = image2.width/image2.height;
var width = 720;
var height = 720/ratio;
// SETTING THE IMAGE SCALE
var scale = width * 1 / image2.width;
// GETTING THE RESIZED IMAGE
var imagenResized = downScaleImage(image2, scale);
// DRAWING THE RESIZED IMAGE
context.drawImage(imagenResized, 0, 78, 720, 1367);
}
catch(err)
{
// IF THERE IS AN ERROR, IT MEANS THAT THE FILE IMAGE IS SMALLER THAN
// THE SIZE THAT IT SUPPOSED TO FILL. SO, BECAUSE OF THIS,
// IN THE FOLLOWING LINE THE IMAGE IS STRETCHED TO FILL.
context.drawImage(image2, 0, 78, 720, 1367);
}
// EXPORTING THE PICTURE AS A PNG IMAGE IN BASE64 FORMAT
document.getElementById("finalResult").src = canvas.toDataURL("data/png");
};
image2.src = filereader.result;
};
// READING/LOADING THE FILE
filereader.readAsDataURL(document.getElementById("screenshot").files[0]);
}
else
{
// EXPORTING THE PICTURE AS A PNG IMAGE IN BASE64 FORMAT
document.getElementById("finalResult").src = canvas.toDataURL("data/png");
}
}
catch(err)
{
// EXPORTING THE PICTURE AS A PNG IMAGE IN BASE64 FORMAT
document.getElementById("finalResult").src = canvas.toDataURL("data/png");
}
}
function downScaleImage(img, scale)
{
var imgCV = document.createElement("canvas");
imgCV.width = img.width;
imgCV.height = img.height;
var imgCtx = imgCV.getContext("2d");
imgCtx.drawImage(img, 0, 0);
return downScaleCanvas(imgCV, scale);
}
function downScaleCanvas(cv, scale)
{
if (!(scale < 1) || !(scale > 0)) throw ("scale must be a positive number <1 ");
var sqScale = scale * scale;
var sw = cv.width;
var sh = cv.height;
var tw = Math.floor(sw * scale);
var th = Math.floor(sh * scale);
var sx = 0, sy = 0, sIndex = 0;
var tx = 0, ty = 0, yIndex = 0, tIndex = 0;
var tX = 0, tY = 0;
var w = 0, nw = 0, wx = 0, nwx = 0, wy = 0, nwy = 0;
var crossX = false;
var crossY = false;
var sBuffer = cv.getContext("2d").getImageData(0, 0, sw, sh).data;
var tBuffer = new Float32Array(4 * sw * sh);
var sR = 0, sG = 0, sB = 0;
var sA = 0;
for (sy = 0; sy < sh; sy++)
{
ty = sy * scale;
tY = 0 | ty;
yIndex = 4 * tY * tw;
crossY = (tY != (0 | ty + scale));
if (crossY)
{
wy = (tY + 1 - ty);
nwy = (ty + scale - tY - 1);
}
for (sx = 0; sx < sw; sx++, sIndex += 4)
{
tx = sx * scale;
tX = 0 | tx;
tIndex = yIndex + tX * 4;
crossX = (tX != (0 | tx + scale));
if (crossX)
{
wx = (tX + 1 - tx);
nwx = (tx + scale - tX - 1);
}
sR = sBuffer[sIndex];
sG = sBuffer[sIndex + 1];
sB = sBuffer[sIndex + 2];
sA = sBuffer[sIndex + 3];
if (!crossX && !crossY)
{
tBuffer[tIndex] += sR * sqScale;
tBuffer[tIndex + 1] += sG * sqScale;
tBuffer[tIndex + 2] += sB * sqScale;
tBuffer[tIndex + 3] += sA * sqScale;
}
else if (crossX && !crossY)
{
w = wx * scale;
tBuffer[tIndex] += sR * w;
tBuffer[tIndex + 1] += sG * w;
tBuffer[tIndex + 2] += sB * w;
tBuffer[tIndex + 3] += sA * w;
nw = nwx * scale
tBuffer[tIndex + 4] += sR * nw;
tBuffer[tIndex + 5] += sG * nw;
tBuffer[tIndex + 6] += sB * nw;
tBuffer[tIndex + 7] += sA * nw;
}
else if (crossY && !crossX)
{
w = wy * scale;
tBuffer[tIndex] += sR * w;
tBuffer[tIndex + 1] += sG * w;
tBuffer[tIndex + 2] += sB * w;
tBuffer[tIndex + 3] += sA * w;
nw = nwy * scale
tBuffer[tIndex + 4 * tw ] += sR * nw;
tBuffer[tIndex + 4 * tw + 1] += sG * nw;
tBuffer[tIndex + 4 * tw + 2] += sB * nw;
tBuffer[tIndex + 4 * tw + 3] += sA * nw;
}
else
{
w = wx * wy;
tBuffer[tIndex] += sR * w;
tBuffer[tIndex + 1] += sG * w;
tBuffer[tIndex + 2] += sB * w;
tBuffer[tIndex + 3] += sA * w;
nw = nwx * wy;
tBuffer[tIndex + 4] += sR * nw;
tBuffer[tIndex + 5] += sG * nw;
tBuffer[tIndex + 6] += sB * nw;
tBuffer[tIndex + 7] += sA * nw;
nw = wx * nwy;
tBuffer[tIndex + 4 * tw] += sR * nw;
tBuffer[tIndex + 4 * tw + 1] += sG * nw;
tBuffer[tIndex + 4 * tw + 2] += sB * nw;
tBuffer[tIndex + 4 * tw + 3] += sA * nw;
nw = nwx * nwy;
tBuffer[tIndex + 4 * tw + 4] += sR * nw;
tBuffer[tIndex + 4 * tw + 5] += sG * nw;
tBuffer[tIndex + 4 * tw + 6] += sB * nw;
tBuffer[tIndex + 4 * tw + 7] += sA * nw;
}
}
}
var resCV = document.createElement("canvas");
resCV.width = tw;
resCV.height = th;
var resCtx = resCV.getContext("2d");
var imgRes = resCtx.getImageData(0, 0, tw, th);
var tByteBuffer = imgRes.data;
var pxIndex = 0;
for (sIndex = 0, tIndex = 0; pxIndex < tw * th; sIndex += 4, tIndex += 4, pxIndex++)
{
tByteBuffer[tIndex] = Math.ceil(tBuffer[sIndex]);
tByteBuffer[tIndex + 1] = Math.ceil(tBuffer[sIndex + 1]);
tByteBuffer[tIndex + 2] = Math.ceil(tBuffer[sIndex + 2]);
tByteBuffer[tIndex + 3] = Math.ceil(tBuffer[sIndex + 3]);
}
resCtx.putImageData(imgRes, 0, 0);
return resCV;
}
// SETTING WHAT WILL HAPPEN WHEN THE USER SELECTS A FILE
document.getElementById("screenshot").addEventListener("change",function(e){update()});
});
</script>
</body>
</html>