in reply to Tk:Photo -data with binary data?

Hi BrowserUK,

Yes, the trick is to construct an image using -file, and then dump the data as a string using the data() method, combined with an easy-to-use format of your choice.  (I'd recommend 'PNG' format).

For example, in the following, I used the subroutine image_from_file() to read the image from a file, and then print the data string using $img->data(-format => 'PNG').  Finally, just cut-and-paste the data back into the program to use it as input in Photo(-data => $data) ...

#!/usr/bin/perl -w + # Strict use strict; use warnings; + # Libraries use Tk; use Tk::Photo; use Tk::JPEG; use Tk::PNG; + # Main program -- construct GUI my $mw = new MainWindow(); $mw->bind("<Escape>" => sub { $mw->destroy() }); my $top = $mw->Frame()->pack(); + # Use this section to create the image from a file (the "easy" way) # my $lab = image_from_file($top, "./smile.png"); + # Use this section to create the image from data (the "tricky" way) my $data = image_data(); my $lab = image_from_data($top, $data); + MainLoop; + + # Subroutines sub image_from_file { my ($widget, $fname) = @_; my $img = $mw->Photo(-file => $fname); + # These two lines show what the data looks like: my $data = $img->data(-format => 'PNG'); print "The data for '$fname' is:\n$data\n"; + my $label = $top->Label(-image => $img); $label->pack(); return $label; } + + sub image_from_data { my ($widget, $data) = @_; my $img = $mw->Photo(-data => $data); my $label = $top->Label(-image => $img); $label->pack(); return $label; } + + sub image_data { return " iVBORw0KGgoAAAANSUhEUgAAAEAAAAAwCAIAAAFZLtveAAAABGdBTUEAAYagMeiWXwAAGI +lJ REFUeJxVmXmsbNlV3n97OHPNVffWHd5w3+s3tHtuB48Y2zgxtkHYaeKABR0wgeA4tgm2lR +BB RECCJE4sJRKJRASCCEVR4sSKIoFChr+iDBbYbrfd8+t+452q7r01n/mcvfNH3W6UkmqQ6o ++z 117f+r5vrQUuLjjuLi6ohkMHqZWQsmFEoSiOgvL4o6M3Pub7Mzvbqh2DgOLkKaE4GT8RQV +uB ogcIsOU7EN5mhNse9Fx8Gl2QFufo3qNBM3/xjV/OjlumYNBa1QDISHp2/p50/mEXvCZ2JC +FC 0PBChQ8+4BF6iKEQSCuSiLo4Yn73M1vtvDz4VH4ytAo0zmr0rgh6cDJ6n8ZJR08jNJ4btS +W+ gxa0QCvSk10kCGQ6bsOGtTeTZQvFarqNAKDtYOObXQ20kvufuNpHSYQgsDLFoq1sE7128h +OS 216FLxdWlpPpyWBrI17tbV39z6sigpigiSboedjiajb/VAt8pECHbbRDGDhC03SY36EpQX +go tKJfTJ/ebYKWntJRgFCSrnA1WoIAZDx6ugtIkE6Ig03/ki0/qbzw+kNM9oNi9uTAwSZb8a +zX bxKBWfhtQGjQCFpNKFbX7r8cbEhc+miEAC5GvesbnUZ19E5bP+LSR6FFhWW11ESNuVBpu8 +nx ayZgIJ1L0r2r7TAvz06SRy+rPyiQovZA4tJyJH6ziwIXQpA92NYAG7QvQgQdF649viVAoy +pp 3KasHad+7rV3d71Ql5Hr37I2MsyX0/TaEwfTrG/JtM5l4BiEq3UxOv7QyWJ4YXdMfXOhy/ +Hy +1rDb5XeMzLwxne3Wt4ZysjKALLnMB99sDzz9wZs+ZEmanSQDkLgOgLJ7Ohhaz6AxkUihO +i5 2PmllovHYPzgF+cHn2vRaAvy+jGfCxqaEXa1KfAQIHDbLsXp0PUVejDsM9wAB9GgG7GGW8 +vH JG2BRKCtKDp9Tlcj6TsqPs0WWEPU7Xs5ZGe+QBgv8vLlwiANRoNi0yc/bHoa4WKSHzFxz8 +7+ 9mr0g3Y+ePW1vyzg6M77Vkc3EQgk4IQwGw3mL/yMbAaeYHJ6PT7oL+bClr/qgmq38+njq/ +En NQ00IHDppPPPxCft5fEHh2KzP2gTImhArxm+LfSxs95mExSgAQQyBFv/en73is33ej4+Op +A9 NFtd7Pja5M5AA0Q+AB4OvfZVF9ohq8UHFscNO3lkNd22yY3VwY5Nd0KFQCNRoJAA4AhU5L +lV XYHe2rpaZEuskdD2rlV1oFlq0AReULmaUBC6hA6Oj+siShqucD1ltDUACBtIoayshUtQkl +tl kGD0Rj/U+SJfcXzweeW/lFevnk4ONjda0kphwXpahDhnEJZmUJYnYdQi72BOsLIsbj70+H ++J MyYZ2C56qgoHJVGSwO+4ru9qBj3Ojp629nI8ZnGwa2df3BQMoI3ebPZch26HsLEu8w6awV +D6 Hr5LvfpAOiI92N7/7ue1BJc1c4MSUTT08XqQHv6kLW7a2aA6uN7pgkCgW310m4tX8QQegU +tv a8Cdg2dO5h/eDOmyrQmaXaklD+6+xya7xcFOj3WKWy4OCiRC0Wj72Pp9drY33f/5ZhMcFJ +vD iMXyE+NFND/9xQg88Bwu7TI+/sJo/OnQXUNRC0DS9ImP31UnnR4oIiRIUEiBI+i0PIr5U7 +bY OucqB9VGKHy0z4ZaozSEFsh2KLshuHicH1Zqoq5PenLTxL0uCAESkLIWBq+0cqYVVVnMT4 +5f u/13epsV5XaYO02H73z3iaODvXT+bNfSL/EXsu/P4/qZxfTJNH9ycvpl3xAhA6o33nhWiK +Nk FRiwApACifR2kM5ghxbY6TN2cjOd7TYVuumj3BCs+Sfp8a4129O7gY0fWc2etMmePd6xh+ ++v R7/QdNm50EbTdxjfe8KudHL4dGutqDjqPECBoOFB22N29lh80izvP/XgwWd6HVxc/SbPdj +UP b3AxoA29AA8ip6uUWpdTPvqldLw3Ooys/RfRuoTl+vbOH+BpeiG0HYrls/HsevyGZ5c3Ry +/e uL5NpNb37OCCDx6oBi44BMrpOyxGb7enjp2rbPrJTggMEQgHFwdBwJoqFQI0gQ+RZEORnv +1o PO8Xy2a2CM/2m/XsB49eeddi/zf2NmmHdCOy+d+49/KezR4pbw9mD3ZHb3ymo+m1mgiNRO +B5 IITC1ho8VIyEsuGqRlkfWx8KepFXLfO7t7/S7b+a5N9W7txrkE/GntTIgDpC7i3iR24+/N +sn KV5DJkt1YXv36OguYCQYT+GA0YqGg3R1VZ3nJ0KGIszdFrUBDR4IMEOkwLYFiQbLEKFwa+ +gq 11rRw/hBI7RF6mkqyY89+0MCuX6WElhJpR23Nk5VG1elg41gdGwEQ8kKJgIEqAayQINQRE +1m MWWJKdCKxNLoES8hR9GuxByJAA+RI8GCdXzH1XVu6kqDCJgmzy6mB6IS2lhhHWVwvH3A2s +AI oyNBWYBDFR1Nrj/9F/7gbEGv9/bx4nuUUrq5KRyhcSpRrlGCQWM2Ql58/jd8/5vz7LmtPU +2Z 5kmuLFgljKe0xFkYs1HjOH5O2TDHC9nM0JfRb29v/k5S+ZXIED3qiWdaQoORGDekzLo9Uy +cc 3v1pX75AcVtFiRGyKK7kq7cJveu10jw/bTVvnIzLh/b+WdgiLXj5hZ/oRVO/dScdHQX9y1 +n+ 2M6Vfz9NwQTY1DMenZYQyCDoOi6hR7r469nscjnD2st28kPL13/tckgTWiJS4PtojdCAJ1 +QH hdC4miz+6vg2dtG25q9d6L0JCoXPmgW9rgebIfn880dvbFfTpllcmxz/SlvQBB8ZEiiCIJ +TK J2opBK6LEIg15BT9Pqf3Pmftbn4UTe4/+6Yaez6A0IrGQHGtz/Gr12YPhE2un9z6CC697l +BI VAPdxnPxYKfxUIBz9+4/Tu0nRoc/24I2ewJQRB7FfMtmV1Z3fszDQwM9HyRUhiS3PP/iTw +8v 2cC9XJuPXnj4v1KSTauWZXL/Y6vDj7YNm25nuToedMq2m6eL55QeWUgxClRNKSjrD5q4lE +Gs aFBLxCQXSGEBacDK/PTgvtu7Mdj87dwifVFQWwf8Fyt5WGvGxSwR8Shm/6RMl+9utT6QCw +rO KjACa7F1pxZYlUINEokVaNAWz9rKWGdw4WK1lKYCoU0hPN/Pc3Z69+F+llNLjVMR8cT3/W +bH I0m+VgqQMQZrUTVC5IgSMOSICgtrKwHGCqyQi/lxnBeuGhJKVJnWx0ri50Od79ZWE1Qo6s +L1 xG6y0sIgjYcFiSCQBikXkhorIUeAlSCl44FIa4sxTlEl7a32Ih2RFZR6zQeVHllx4FGRQK +6J BcVB269CTaTybgNtcFGOZTp5TXVaSrfA8KaiSYNBYhSdzhVXY+J914WayL2kDYvFr9zbf8 +9k /vFWSN/Br6uWzJsRr77y6P7xw6/ce2+REypHkGGJmjHIumhaHARYJTGyKrQOAIj7TbdTxS +fK xXNVoe9Yl3v3vlOkD4rsT8bzq/cffLjl0Yy4/fqwc3klq/3htlUOcYVyq06LVXrXzs+02r +AE 2LVhNEALje9xvUl5sGmnN5azH3XQaBT0HU5vvdPOmsmRa5fX0snNfPl4Me7a4v2Llz90sY +Or QeJHckNiskZ+0tryzlsl8PTalYLW0JbY4mPZtGHjH7jWAQ902xGd0GFy+sOjw2Y527L5jT +Ld ruvgZP/aQDEMtaNBIx1W9z6dLTfmo8cGPj6Stc1x1tKMo4kimI0/bc2VYrxtz37cbdB06T +cG a17p+7QFPdhyaQk2GjS1F7htJFGPK5exZx+0xd4br19tKbx1DtSaMBQgFb0Q9jaYn77bJN +vV fNuu3nl1gy747AoCFK1tH40jgCFs++3LMBT0PMVq8iU7uZBPu8v5M12Noo+7Pnqw/kLR8o +gG HvdvfXZ+8o50MqzuNfKDa+nxM/2AdkCz1Y82e3jgggxotGkTdRohbIbY/JIt28nJcNhF4c +EG GqXw6J3fkQCFDqCt6AZM9384uz208yfnD1rx7KH5yc+1NbttFRBoJHQcNxQeYchWSH3wXn +s2 sPby7MGH286aSBsgXUGIg8ADvTaqDS9qiuihLb03YPzK57PFY2cjYe12Mo1s9nY7+5H5/q +e6 Hu2AS9tMR18wyV9d7F+2k8v2aK+af+RCa+1VHaQENI4HQiAtDjJHQoVgQ5EM+vF0jhaMx5 +9Z JP9pa6e7PNxvbl4h8a1Tl+aBLazLIEtN0C0hrsSVTvdPGz4VwWRWW1EIkDYSxEIIrI0gx6 +kw UA8EcdhM4wwqIoFn+bNv/dSlvVPdOKWemWpBmYkc0d4hCdPi6tVrX1+mxNDthrOJleRrqj +Bg bUfhnOcZqwWBwlM4Eimp1fm8AsfVxoBw/bBflQKE49dmbf8lYaNZliAVusYBh3XTge0gHZ +wC jbBIgRa4EkfhCLRFQtQkN+BAALWjor4tk3V1+o1+VdYI7YSRqUqlrTRocJQ01iLBobcbiv +NW lnVvCOL8h0BYa/vdwWQ600iDBdlvd2bzUbspF7ERAkBahGHQYTY7j1YKhGUtYkJxa/9npR +5T tzGBsAoMMkVmUdc7evD6YDCIk9pzd6cn6uMf+9179yjBgOOzKqgFQYPVHOx6wAa2AVLJXH +vW GMqiEJrIYmpKRMX5jGidEOl4UZnEgYMpzYUtd3xc9Nskc5TixVu/1h4eZvVzy+Tl4XAwm9 +6P glBaLYySVmMlVmEcrKSqESUyRhiLb62H9axA9aL0+EEQNE8PD1tB4O5dWLz8SuuhbdJWaS +5m 8aWr136/sBioi40UD87QBSbC5sgcELWUeMJFG0yNsWtnK88LG+1Q5cLiKxyLKzlZ/qPl8Z +96 3r0su9u6MCCdQ1mVtfZbdS6s8a11QWElwhhRg5FWycpFWCPjWjimHtS2Y2xgRaHVLC/O2m +Gr TMpANct44nRL0jGeW6bG8bcRzbNl3em/t939h5mhdqGGugUKMcWgraPxxRpAUlEaYa1GSD +Be JBxVKEGZcevVL3fbI2nvpvHr7UYthEGp04PxYGsL1cwSR6kLSdK5cf1rpsbRJDlGYRTao6 +pp eCQxBrQDFXFKt31xMj/QnrEWoYgCqoxBn1uv//zR/jcGjZm3GbI8pVZlFdT2YcRf7O/8cs +Jb 0AABNa5BInWlaEQiXljQAi1tpShJcCNeeukf9Lqjuv5OFr/S2bDx8rgyclWEjeimcZ549G +3/ 4/ToWEJuXwJhaJY4VekoPAtZuSCLEWUcgwKLllQZG1sXT45PkUGdF4g6chvzZVJXVVgNws +7v UbN/+2e87FXcVZ2cOZ7n5LOseCkEU5GJt+jhrWiMOMeLiEQtFfWgJZJVLAX3j76k9evY20 +6U 2myWp5nfHZaLnXHynmvX/6mtwCJwBt3eeDra2GQZk+Q0QqSgyCkqaotZs4NFChpN8gILwu +K7 FDG1wSJr8CKRpHWj469mWc+n2eD5736/Vs9FLZWNll40tOL9vf5/SC2FAqDugHRZSkqNVN +RW OW5VFw3HmS/m3QbPP/8FV7yg5D5qauJMyLbrPjQ/3Hz6nX/0YPG/KksYbSWrlSvTk2T0yo +Ov RO1j1z87Hc0Dff3tD3+1zPBxIufCvMwC5aT1fSE5Ovyts/jfRc1jYVxZPX5l8Ce+kstyp8 +Sr 4lHDz+NZFkXklnhO0HpMUybje4EbCbdlY6kskhZmgQJyUIYa0KqqDZTF1MKi9HzFssJtHh +l7 xxSnTtjL8o4KHt+8+LW8oLe5UVUnWPJV6aO7us5Lthsvr+L/03StE4TFaiATHKgoV+WDdh +hM k6UUKEudhJvNp85mzwvparlZQlKaitSSQ5JmRkG2pJYol17/Xx0/+FvCVZVzoNQ4U0drQV +K2 UVc5MkVQARa95hyLsGgIrM2NpcbBKMfRWDM+Ld/3vq/ZksKwLGt8hHTrlTWYs4JGi/uny9 +1L V1b10vpbD+6HRcCiRCg36siTYllpEAjJjae/mKwQhrqitt+sBZWiNmcgsfLPJciiaqRCUA +oq RC3+HPI55Ij6vJQta+ci16wP2qDs+V+O8vy6tsLEW9tPZ/HrRQ2Ou5ou8Bs2y1BLa2xpwX +pP Xv+6BCEwlgLq9RjWs7NVJrouVYHBGo4OURZfUhuUpDaYc8Y2bx0dqwVCmVIqhIilSCXFem +Zm wZAbynOlsuefmnUqpMBYC4h1ABJllC5LW2VlIiS2jmwdoyFfncuFouGRpvm6rrQNcoyiFM +rI gKIwaOyywICKyD2JdZgpYxX4DjanhtpQy3OVlVYLfIlUplQCJReYGFGDNtYBWJ9+Lcno8w +zU AuVQVxZZOrosa7Tl7CTZ2amclnZkUCYrFKKMkQhHuXYrT5aKRRSgYf/oK1V1P/DM6cn84o +Un 792tnnjyV8uEALKCTmdrGs87DTIxCV2U5datz0sVN9uNs2nV6d04OOLhR79oKjxFbozCQu +1r 3rj9Oa/5UjpdTSaTjctvq6bBmsysMG96CrF+a8d1y7JAIB2Ug7aQosxGnli/oahqaRcv3/ +rJ R5/4t5MlVVLntgApJZ0e8ylSvdQOD1WYXOzm+7f+eLh1/XT0ifFJ+13v+MN0hZ0dP9RnMu +V4 /7NR+FqV3TLmXweBi5Bht0i5FLafGmxwckBmdLcVzRbzhvTrkkZjgZoEfpEn0sYK0wcsHq +Tn lgspqCWVLksfq2RgsVmWoQ0PDSDddExvuX+3ObzYaLmn9/77/uHf7DR/p7ZYdYJEBpzNkQ +bN zujgwc5FhRhfuKaS028q51u7V4YvvbrTal7P0uYqDjpddXb69fZOS49PZ9Mk7LyNXDrSOz +3z 2r2r41MqQW3FOJsjyEy202eV3Gv5h3kx71y6Fh8g6VjWHVKK5bzoOR8pdlDWCVSZTJBoQ1 +dC xf2Dv+KHr2HSVXza2GouJ7vXLn5jVZI46FarOgNkS1tp51JwNvl7xn6rKF93nEJSiUa3nM +4R lVWyEjYIvDyZigrPG+anvrA3XP+R7Qu/VSviGuuSFiDBcSjKVs3B3d9sXP6fZ0f/reE5Xu +/G 4Svq/T/w3ZNTclo5CbLCagBbvbV6Wk8yHYFWFJpSKdo9vvFnH7x4eWHLe/UKXQ8Rj1za+Y +9j TdhnMaFOpLB9V3lFfdZppUUNsLPLC9/5qcXZka+VMr61YhGvoq4Xdsz49KjT2UqTrSsX/t +AR xClK9SqbCrfObSE96hgl6Cvuv/ERrz9erO4HUc+a3TS+fuXi79YFFRREFSBj1Jv2H31OUV +gt CNeDc0Xe6/H89/5uaf93GBx4KnYbzcX+qtW7RvP65NS5evH3bEGnyemcKArncdFt7Z4t5h +IM pavrqspA95v9+XIm0YHbWRSpp6O4SobD7cPRPiCFNTZTqqptLRVRiMk5euXjzc7hfHarvd +mY JUmn/6Fe8PUqo8QxeLVY1fJNGrWs/dtbASCIJJ5CSFahk1eG557/3NWbxXL+rTBcpNlp5G +kR dpjMCfvzUdiOPrS399VljEEY5aYmtx5VjQiwOQRoTbWEGirvwpUn9u8cIErCmjzGusiIUn +R8 U2SjMOKFV3/BES/0wlG1vKMjRWNruerdf3Dh+9/1x2mua4Y1BepkbQ1FjTSOIHgTQnYdgA +Yl cQRWkSqM62AFyuH1N34cOe6GCcScjWgOcBxMluW139w5OHJ73Q8Nh3+/qqhBaJmXJmg00m +Sl HaoKDMgQY5E52gDaxaZ4hkjz0ve+1G7f0c63BQ8QBu2aXArn0dny3Xt7/7I05MY3hADEyF +xI lEEZKWgI8M7vH/PmXA1hz33rZq87mUzbbawhLbj92per5IXNmx3icTK/p73E7en52aF2A1 +M3 Q+9yXW67raeGwa/biq1N9o9xfZYZBnwfBGkOmmaDvOD+3c9KM271YHG4Gt1vPHyF0R28Mi +9c z39iGd+4fOGfW8WyxA1baZqCxAK1olJvdvJC4IC050OJ8s2mDGqkVYqmK4LSLj1ZSF2UJb +7C j/j2936p5lXPH2s1bfeC2cm9Ts89PZ4MdrfJcmxjOp52h0Pq9slpZ2Pr2v7BK91eKDHT6X +Tn wpWzwyMpizA0Xt+Nj16M2uFifNy6cL2c1k7vifFx++Erv19VlGChsDIImkm2fMtxCNuQWE +UM CCHAYnFY24r1WkLgeJQx2JYr26XJXMqNLe9oNFrvUmWNJzA1rRb/9xs/t3czqFd3jZkV2T +Tq +OVqijFVoaQjK1ZWLKNGLSjXbqdcIgh1tJXPU+35aBcVJIVZLCo3eGTv2r9ptzk5wlq6ne +bZ bClwLfb/8xFrK4Fhvc/CYs1bG6UcVa6TIBQ2b643OFk5bTbNMlmnSGOqqBFms1ojWyos6r +NA on2swgh8n1duPZYWI9c10hpprMKRno/RpBm1QWhUgDMw+eDS3h9ph8UCCwWh8PtxNkWtsH +iq U5ZGrE3oWy+BkeszR9D4fy8h5JwCOPDUAAAAAElFTkSuQmCC"; }

s''(q.S:$/9=(T1';s;(..)(..);$..=substr+crypt($1,$2),2,3;eg;print$..$/

Replies are listed 'Best First'.
Re^2: Tk:Photo -data with binary data?
by BrowserUk (Patriarch) on Nov 28, 2006 at 21:08 UTC

    Sorry, I guess I wasn't very clear. I already have the image in memory in binary format (from GD), and I want to avoid converting it to base64 or writng it out to a file.


    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.