public function gentom()
 {
     $sw = '{"d7c8b5":{"file":"01-d7c8b5.png","id":1},"d2b9a0":{"file":"02-d2b9a0.png","id":2},"cbb79c":{"file":"03-cbb79c.png","id":3},"b8a28c":{"file":"04-b8a28c.png","id":4},"ddbf9e":{"file":"05-ddbf9e.png","id":5},"d1b293":{"file":"06-d1b293.png","id":6},"cfa690":{"file":"07-cfa690.png","id":7},"dab084":{"file":"08-dab084.png","id":8},"b69b76":{"file":"09-b69b76.png","id":9},"6b5b4b":{"file":"10-6b5b4b.png","id":10},"501d24":{"file":"11-501d24.png","id":11},"4d1b22":{"file":"12-4d1b22.png","id":12},"3f2022":{"file":"13-3f2022.png","id":13},"431e22":{"file":"14-431e22.png","id":14},"622430":{"file":"15-622430.png","id":15},"621b24":{"file":"16-621b24.png","id":16},"7e1f33":{"file":"17-7e1f33.png","id":17},"99232d":{"file":"18-99232d.png","id":18},"be3849":{"file":"19-be3849.png","id":19},"a62d46":{"file":"20-a62d46.png","id":20},"e3cfb7":{"file":"21-e3cfb7.png","id":21},"d0b79e":{"file":"22-d0b79e.png","id":22},"dbb086":{"file":"23-dbb086.png","id":23},"dbb89c":{"file":"24-dbb89c.png","id":24},"c39b78":{"file":"25-c39b78.png","id":25},"d4b194":{"file":"26-d4b194.png","id":26},"c3976d":{"file":"27-c3976d.png","id":27},"b6906b":{"file":"28-b6906b.png","id":28},"73533c":{"file":"29-73533c.png","id":29},"604742":{"file":"30-604742.png","id":30},"542126":{"file":"31-542126.png","id":31},"4e2426":{"file":"32-4e2426.png","id":32},"441e26":{"file":"33-441e26.png","id":33},"471a1e":{"file":"34-471a1e.png","id":34},"731727":{"file":"35-731727.png","id":35},"a7282d":{"file":"36-a7282d.png","id":36},"a12227":{"file":"37-a12227.png","id":37},"a33145":{"file":"38-a33145.png","id":38},"cf6672":{"file":"39-cf6672.png","id":39},"a03856":{"file":"40-a03856.png","id":40},"d0b99b":{"file":"41-d0b99b.png","id":41},"e2ba94":{"file":"42-e2ba94.png","id":42},"d2ae8f":{"file":"43-d2ae8f.png","id":43},"d5a47a":{"file":"44-d5a47a.png","id":44},"d4a47c":{"file":"45-d4a47c.png","id":45},"bb9973":{"file":"46-bb9973.png","id":46},"b29273":{"file":"47-b29273.png","id":47},"906d53":{"file":"48-906d53.png","id":48},"ae7549":{"file":"49-ae7549.png","id":49},"a57a50":{"file":"50-a57a50.png","id":50},"441c21":{"file":"51-441c21.png","id":51},"3f171c":{"file":"52-3f171c.png","id":52},"5a2730":{"file":"53-5a2730.png","id":53},"861b29":{"file":"54-861b29.png","id":54},"cc4046":{"file":"55-cc4046.png","id":55},"d83f45":{"file":"56-d83f45.png","id":56},"ce2e33":{"file":"57-ce2e33.png","id":57},"f59185":{"file":"58-f59185.png","id":58},"d84c60":{"file":"59-d84c60.png","id":59},"262724":{"file":"60-262724.png","id":60},"dcb585":{"file":"61-dcb585.png","id":61},"b7946e":{"file":"62-b7946e.png","id":62},"daa989":{"file":"63-daa989.png","id":63},"d8a47c":{"file":"64-d8a47c.png","id":64},"bd9b80":{"file":"65-bd9b80.png","id":65},"a77d5d":{"file":"66-a77d5d.png","id":66},"7c5946":{"file":"67-7c5946.png","id":67},"c5985b":{"file":"68-c5985b.png","id":68},"845a44":{"file":"69-845a44.png","id":69},"a7764c":{"file":"145-a7764c.png","id":145},"482327":{"file":"71-482327.png","id":71},"823133":{"file":"72-823133.png","id":72},"791b27":{"file":"73-791b27.png","id":73},"891d2f":{"file":"74-891d2f.png","id":74},"91413d":{"file":"75-91413d.png","id":75},"b01f2c":{"file":"76-b01f2c.png","id":76},"df5d5b":{"file":"77-df5d5b.png","id":77},"e76269":{"file":"78-e76269.png","id":78},"2c2c2e":{"file":"79-2c2c2e.png","id":79},"232c39":{"file":"80-232c39.png","id":80},"be9b77":{"file":"81-be9b77.png","id":81},"b79372":{"file":"82-b79372.png","id":82},"b78b63":{"file":"83-b78b63.png","id":83},"c8a17b":{"file":"84-c8a17b.png","id":84},"c09469":{"file":"85-c09469.png","id":85},"8d6c4f":{"file":"86-8d6c4f.png","id":86},"bf9e59":{"file":"87-bf9e59.png","id":87},"9c6a48":{"file":"88-9c6a48.png","id":88},"9a7251":{"file":"89-9a7251.png","id":89},"956846":{"file":"90-956846.png","id":90},"692328":{"file":"91-692328.png","id":91},"751c27":{"file":"92-751c27.png","id":92},"a32734":{"file":"93-a32734.png","id":93},"a2373e":{"file":"94-a2373e.png","id":94},"c14840":{"file":"95-c14840.png","id":95},"d16068":{"file":"96-d16068.png","id":96},"c67463":{"file":"97-c67463.png","id":97},"2b2728":{"file":"98-2b2728.png","id":98},"222a3f":{"file":"99-222a3f.png","id":99},"1d2f3f":{"file":"100-1d2f3f.png","id":100},"ae8a6f":{"file":"101-ae8a6f.png","id":101},"b78a69":{"file":"102-b78a69.png","id":102},"b69468":{"file":"103-b69468.png","id":103},"ba9b81":{"file":"104-ba9b81.png","id":104},"8c6f57":{"file":"105-8c6f57.png","id":105},"bf9564":{"file":"106-bf9564.png","id":106},"ab793d":{"file":"107-ab793d.png","id":107},"af7a51":{"file":"108-af7a51.png","id":108},"7e553c":{"file":"109-7e553c.png","id":109},"986646":{"file":"110-986646.png","id":110},"811d2c":{"file":"111-811d2c.png","id":111},"782b2e":{"file":"112-782b2e.png","id":112},"743030":{"file":"113-743030.png","id":113},"c46b66":{"file":"114-c46b66.png","id":114},"e95c67":{"file":"115-e95c67.png","id":115},"e88188":{"file":"116-e88188.png","id":116},"262728":{"file":"117-262728.png","id":117},"1f2332":{"file":"118-1f2332.png","id":118},"222d46":{"file":"119-222d46.png","id":119},"2c3b47":{"file":"120-2c3b47.png","id":120},"ac805e":{"file":"121-ac805e.png","id":121},"a98e76":{"file":"122-a98e76.png","id":122},"aa876c":{"file":"123-aa876c.png","id":123},"9a785e":{"file":"124-9a785e.png","id":124},"b08a4b":{"file":"125-b08a4b.png","id":125},"a17548":{"file":"126-a17548.png","id":126},"806049":{"file":"127-806049.png","id":127},"735550":{"file":"128-735550.png","id":128},"5d3c32":{"file":"129-5d3c32.png","id":129},"41322f":{"file":"130-41322f.png","id":130},"682d2c":{"file":"131-682d2c.png","id":131},"692122":{"file":"132-692122.png","id":132},"9a4544":{"file":"133-9a4544.png","id":133},"863645":{"file":"134-863645.png","id":134},"ef9692":{"file":"135-ef9692.png","id":135},"342a2c":{"file":"136-342a2c.png","id":136},"222629":{"file":"137-222629.png","id":137},"232a42":{"file":"138-232a42.png","id":138},"2b3648":{"file":"139-2b3648.png","id":139},"53598e":{"file":"140-53598e.png","id":140},"9c7d5d":{"file":"141-9c7d5d.png","id":141},"977561":{"file":"142-977561.png","id":142},"9e7b67":{"file":"143-9e7b67.png","id":143},"99784f":{"file":"144-99784f.png","id":144},"6e5045":{"file":"146-6e5045.png","id":146},"634126":{"file":"147-634126.png","id":147},"563824":{"file":"148-563824.png","id":148},"48342b":{"file":"149-48342b.png","id":149},"b06a62":{"file":"150-b06a62.png","id":150},"9e484b":{"file":"151-9e484b.png","id":151},"b0544e":{"file":"152-b0544e.png","id":152},"e4699f":{"file":"153-e4699f.png","id":153},"e991b0":{"file":"154-e991b0.png","id":154},"252526":{"file":"155-252526.png","id":155},"202934":{"file":"156-202934.png","id":156},"2e3b54":{"file":"157-2e3b54.png","id":157},"2e404a":{"file":"158-2e404a.png","id":158},"576e8e":{"file":"159-576e8e.png","id":159},"28487a":{"file":"160-28487a.png","id":160},"9d856b":{"file":"161-9d856b.png","id":161},"96704b":{"file":"162-96704b.png","id":162},"b98d62":{"file":"163-b98d62.png","id":163},"a47041":{"file":"164-a47041.png","id":164},"814230":{"file":"165-814230.png","id":165},"574231":{"file":"166-574231.png","id":166},"443025":{"file":"167-443025.png","id":167},"3f2c25":{"file":"168-3f2c25.png","id":168},"b85650":{"file":"169-b85650.png","id":169},"ad6b45":{"file":"170-ad6b45.png","id":170},"d63c86":{"file":"171-d63c86.png","id":171},"de5693":{"file":"172-de5693.png","id":172},"f59aa5":{"file":"173-f59aa5.png","id":173},"343241":{"file":"174-343241.png","id":174},"2c3742":{"file":"175-2c3742.png","id":175},"263147":{"file":"176-263147.png","id":176},"295074":{"file":"177-295074.png","id":177},"5c70ac":{"file":"178-5c70ac.png","id":178},"3b5d82":{"file":"179-3b5d82.png","id":179},"656d8d":{"file":"180-656d8d.png","id":180},"9f7859":{"file":"181-9f7859.png","id":181},"937144":{"file":"182-937144.png","id":182},"966b44":{"file":"183-966b44.png","id":183},"854b23":{"file":"184-854b23.png","id":184},"713f25":{"file":"185-713f25.png","id":185},"472e26":{"file":"186-472e26.png","id":186},"33251f":{"file":"187-33251f.png","id":187},"984538":{"file":"188-984538.png","id":188},"5d372d":{"file":"189-5d372d.png","id":189},"683d26":{"file":"190-683d26.png","id":190},"f79d84":{"file":"191-f79d84.png","id":191},"e1a59a":{"file":"192-e1a59a.png","id":192},"2b3039":{"file":"193-2b3039.png","id":193},"262d3b":{"file":"194-262d3b.png","id":194},"293b59":{"file":"195-293b59.png","id":195},"355888":{"file":"196-355888.png","id":196},"516076":{"file":"197-516076.png","id":197},"515368":{"file":"198-515368.png","id":198},"4c6082":{"file":"199-4c6082.png","id":199},"4870a0":{"file":"200-4870a0.png","id":200},"9c713a":{"file":"201-9c713a.png","id":201},"b7957a":{"file":"202-b7957a.png","id":202},"a5693f":{"file":"203-a5693f.png","id":203},"804a2e":{"file":"204-804a2e.png","id":204},"603b29":{"file":"205-603b29.png","id":205},"4c3629":{"file":"206-4c3629.png","id":206},"78383a":{"file":"207-78383a.png","id":207},"5a3c20":{"file":"208-5a3c20.png","id":208},"6d3f2d":{"file":"209-6d3f2d.png","id":209},"9f2e26":{"file":"210-9f2e26.png","id":210},"e1b1ac":{"file":"211-e1b1ac.png","id":211},"38383a":{"file":"212-38383a.png","id":212},"2d354a":{"file":"213-2d354a.png","id":213},"333959":{"file":"214-333959.png","id":214},"374974":{"file":"215-374974.png","id":215},"38486e":{"file":"216-38486e.png","id":216},"637585":{"file":"217-637585.png","id":217},"63838a":{"file":"218-63838a.png","id":218},"4e7cbe":{"file":"219-4e7cbe.png","id":219},"7399b3":{"file":"220-7399b3.png","id":220},"ab8b56":{"file":"221-ab8b56.png","id":221},"aa6d32":{"file":"222-aa6d32.png","id":222},"8b4933":{"file":"223-8b4933.png","id":223},"743f33":{"file":"224-743f33.png","id":224},"44332b":{"file":"225-44332b.png","id":225},"9b3d36":{"file":"226-9b3d36.png","id":226},"624229":{"file":"227-624229.png","id":227},"53392d":{"file":"228-53392d.png","id":228},"a73c23":{"file":"229-a73c23.png","id":229},"c33727":{"file":"230-c33727.png","id":230},"3a3c49":{"file":"231-3a3c49.png","id":231},"282829":{"file":"232-282829.png","id":232},"2a3a59":{"file":"233-2a3a59.png","id":233},"334b77":{"file":"234-334b77.png","id":234},"4c77bb":{"file":"235-4c77bb.png","id":235},"405f7d":{"file":"236-405f7d.png","id":236},"588ebd":{"file":"237-588ebd.png","id":237},"527197":{"file":"238-527197.png","id":238},"6d92b3":{"file":"239-6d92b3.png","id":239},"8da0aa":{"file":"240-8da0aa.png","id":240},"8a573a":{"file":"241-8a573a.png","id":241},"8b4b30":{"file":"242-8b4b30.png","id":242},"3e2d26":{"file":"243-3e2d26.png","id":243},"382928":{"file":"244-382928.png","id":244},"86302c":{"file":"245-86302c.png","id":245},"b24933":{"file":"246-b24933.png","id":246},"5a4536":{"file":"247-5a4536.png","id":247},"ca4b28":{"file":"248-ca4b28.png","id":248},"8d4433":{"file":"249-8d4433.png","id":249},"da7a51":{"file":"250-da7a51.png","id":250},"2b2a30":{"file":"251-2b2a30.png","id":251},"334264":{"file":"252-334264.png","id":252},"505a6b":{"file":"253-505a6b.png","id":253},"32479a":{"file":"254-32479a.png","id":254},"3a63a5":{"file":"255-3a63a5.png","id":255},"5288a9":{"file":"256-5288a9.png","id":256},"586679":{"file":"257-586679.png","id":257},"63779b":{"file":"258-63779b.png","id":258},"9f9a9f":{"file":"259-9f9a9f.png","id":259},"98a1ab":{"file":"260-98a1ab.png","id":260},"653628":{"file":"261-653628.png","id":261},"5a382f":{"file":"262-5a382f.png","id":262},"322829":{"file":"263-322829.png","id":263},"7c3630":{"file":"264-7c3630.png","id":264},"793c2c":{"file":"265-793c2c.png","id":265},"483839":{"file":"266-483839.png","id":266},"d85527":{"file":"267-d85527.png","id":267},"ea7033":{"file":"268-ea7033.png","id":268},"c68061":{"file":"269-c68061.png","id":269},"e08862":{"file":"270-e08862.png","id":270},"354b68":{"file":"271-354b68.png","id":271},"4273b9":{"file":"293-4273b9.png","id":293},"4f5f89":{"file":"273-4f5f89.png","id":273},"445998":{"file":"274-445998.png","id":274},"2972a3":{"file":"275-2972a3.png","id":275},"4b668e":{"file":"276-4b668e.png","id":276},"789dd3":{"file":"277-789dd3.png","id":277},"a2b3bd":{"file":"278-a2b3bd.png","id":278},"b4b5b5":{"file":"279-b4b5b5.png","id":279},"cfbab5":{"file":"280-cfbab5.png","id":280},"4a3728":{"file":"281-4a3728.png","id":281},"2a2220":{"file":"282-2a2220.png","id":282},"752e26":{"file":"283-752e26.png","id":283},"70292a":{"file":"284-70292a.png","id":284},"3d3125":{"file":"285-3d3125.png","id":285},"51412b":{"file":"286-51412b.png","id":286},"8d3d2f":{"file":"287-8d3d2f.png","id":287},"f59051":{"file":"288-f59051.png","id":288},"f68b4c":{"file":"289-f68b4c.png","id":289},"fcb448":{"file":"290-fcb448.png","id":290},"5e6a6e":{"file":"291-5e6a6e.png","id":291},"275093":{"file":"292-275093.png","id":292},"4c7094":{"file":"294-4c7094.png","id":294},"5b90ab":{"file":"295-5b90ab.png","id":295},"87a5c2":{"file":"296-87a5c2.png","id":296},"78a0ca":{"file":"297-78a0ca.png","id":297},"a7aab1":{"file":"298-a7aab1.png","id":298},"c4b6ad":{"file":"299-c4b6ad.png","id":299},"d1c0b6":{"file":"300-d1c0b6.png","id":300},"cec798":{"file":"301-cec798.png","id":301},"bfc799":{"file":"302-bfc799.png","id":302},"becfa5":{"file":"303-becfa5.png","id":303},"d2debb":{"file":"304-d2debb.png","id":304},"b7b7ad":{"file":"305-b7b7ad.png","id":305},"81993c":{"file":"306-81993c.png","id":306},"7ea888":{"file":"307-7ea888.png","id":307},"6aa897":{"file":"308-6aa897.png","id":308},"94c4af":{"file":"309-94c4af.png","id":309},"e9debd":{"file":"310-e9debd.png","id":310},"f3f1d7":{"file":"311-f3f1d7.png","id":311},"fdf8e0":{"file":"312-fdf8e0.png","id":312},"fdd7a8":{"file":"313-fdd7a8.png","id":313},"faeabb":{"file":"314-faeabb.png","id":314},"fdc986":{"file":"315-fdc986.png","id":315},"fcc87c":{"file":"316-fcc87c.png","id":316},"faa962":{"file":"317-faa962.png","id":317},"ec5825":{"file":"318-ec5825.png","id":318},"ecae24":{"file":"319-ecae24.png","id":319},"a77a45":{"file":"320-a77a45.png","id":320},"c6caaa":{"file":"321-c6caaa.png","id":321},"afbea6":{"file":"322-afbea6.png","id":322},"9ec4a5":{"file":"323-9ec4a5.png","id":323},"d6e7c9":{"file":"324-d6e7c9.png","id":324},"699754":{"file":"325-699754.png","id":325},"696c40":{"file":"326-696c40.png","id":326},"629c83":{"file":"327-629c83.png","id":327},"6aae9c":{"file":"328-6aae9c.png","id":328},"96cbbe":{"file":"329-96cbbe.png","id":329},"acd0ba":{"file":"330-acd0ba.png","id":330},"f6efca":{"file":"331-f6efca.png","id":331},"ffeac6":{"file":"332-ffeac6.png","id":332},"fbd796":{"file":"333-fbd796.png","id":333},"fedb74":{"file":"334-fedb74.png","id":334},"efc25e":{"file":"335-efc25e.png","id":335},"f1b154":{"file":"336-f1b154.png","id":336},"e46225":{"file":"337-e46225.png","id":337},"e18d26":{"file":"338-e18d26.png","id":338},"9b7940":{"file":"339-9b7940.png","id":339},"b69051":{"file":"340-b69051.png","id":340},"a5c8af":{"file":"341-a5c8af.png","id":341},"b9cbb0":{"file":"342-b9cbb0.png","id":342},"91ad84":{"file":"343-91ad84.png","id":343},"597e49":{"file":"344-597e49.png","id":344},"4a6737":{"file":"345-4a6737.png","id":345},"977d3f":{"file":"346-977d3f.png","id":346},"5d9583":{"file":"347-5d9583.png","id":347},"669185":{"file":"348-669185.png","id":348},"739f86":{"file":"349-739f86.png","id":349},"b6e1d9":{"file":"350-b6e1d9.png","id":350},"fce6a4":{"file":"351-fce6a4.png","id":351},"e4be6a":{"file":"352-e4be6a.png","id":352},"fccc7f":{"file":"353-fccc7f.png","id":353},"fddb6a":{"file":"354-fddb6a.png","id":354},"fdc24e":{"file":"355-fdc24e.png","id":355},"e17927":{"file":"356-e17927.png","id":356},"ea9d21":{"file":"357-ea9d21.png","id":357},"9f7937":{"file":"358-9f7937.png","id":358},"6a492e":{"file":"359-6a492e.png","id":359},"b99153":{"file":"360-b99153.png","id":360},"909a7e":{"file":"361-909a7e.png","id":361},"8aa87c":{"file":"362-8aa87c.png","id":362},"7a8157":{"file":"363-7a8157.png","id":363},"61713a":{"file":"364-61713a.png","id":364},"897e3f":{"file":"365-897e3f.png","id":365},"796b39":{"file":"366-796b39.png","id":366},"547f55":{"file":"367-547f55.png","id":367},"4d7553":{"file":"368-4d7553.png","id":368},"4b7b65":{"file":"369-4b7b65.png","id":369},"569585":{"file":"370-569585.png","id":370},"fde495":{"file":"371-fde495.png","id":371},"f7cd68":{"file":"372-f7cd68.png","id":372},"f7c450":{"file":"373-f7c450.png","id":373},"fed959":{"file":"374-fed959.png","id":374},"f1981f":{"file":"375-f1981f.png","id":375},"d7a528":{"file":"376-d7a528.png","id":376},"d4b571":{"file":"377-d4b571.png","id":377},"c29445":{"file":"378-c29445.png","id":378},"c39e58":{"file":"379-c39e58.png","id":379},"7d5828":{"file":"380-7d5828.png","id":380},"889a80":{"file":"381-889a80.png","id":381},"aea676":{"file":"382-aea676.png","id":382},"cfbf8d":{"file":"383-cfbf8d.png","id":383},"9f9b50":{"file":"384-9f9b50.png","id":384},"5d5737":{"file":"385-5d5737.png","id":385},"636349":{"file":"386-636349.png","id":386},"43634a":{"file":"387-43634a.png","id":387},"5a856a":{"file":"388-5a856a.png","id":388},"3f6657":{"file":"389-3f6657.png","id":389},"3f715b":{"file":"390-3f715b.png","id":390},"fcd785":{"file":"391-fcd785.png","id":391},"fce284":{"file":"392-fce284.png","id":392},"fcda5f":{"file":"393-fcda5f.png","id":393},"f6841f":{"file":"394-f6841f.png","id":394},"f3b418":{"file":"395-f3b418.png","id":395},"e8c473":{"file":"396-e8c473.png","id":396},"cb9136":{"file":"397-cb9136.png","id":397},"966d40":{"file":"398-966d40.png","id":398},"95672f":{"file":"399-95672f.png","id":399},"775937":{"file":"400-775937.png","id":400},"684f2d":{"file":"401-684f2d.png","id":401},"385c38":{"file":"402-385c38.png","id":402},"385831":{"file":"403-385831.png","id":403},"405339":{"file":"404-405339.png","id":404},"485338":{"file":"405-485338.png","id":405},"51553a":{"file":"406-51553a.png","id":406},"3e6b54":{"file":"407-3e6b54.png","id":407},"355d4a":{"file":"408-355d4a.png","id":408},"527d7c":{"file":"409-527d7c.png","id":409},"326069":{"file":"410-326069.png","id":410},"fdeab0":{"file":"411-fdeab0.png","id":411},"fbe46d":{"file":"412-fbe46d.png","id":412},"f89c4f":{"file":"413-f89c4f.png","id":413},"f2b418":{"file":"414-f2b418.png","id":414},"d8b574":{"file":"415-d8b574.png","id":415},"b58935":{"file":"416-b58935.png","id":416},"c69437":{"file":"417-c69437.png","id":417},"9a7144":{"file":"418-9a7144.png","id":418},"77635d":{"file":"419-77635d.png","id":419},"8a6a71":{"file":"420-8a6a71.png","id":420},"56452f":{"file":"421-56452f.png","id":421},"54472a":{"file":"422-54472a.png","id":422},"3b4b37":{"file":"423-3b4b37.png","id":423},"2f4131":{"file":"424-2f4131.png","id":424},"2a4c33":{"file":"425-2a4c33.png","id":425},"555d3c":{"file":"426-555d3c.png","id":426},"6b654f":{"file":"427-6b654f.png","id":427},"96b2bb":{"file":"428-96b2bb.png","id":428},"7aa8bd":{"file":"429-7aa8bd.png","id":429},"45757f":{"file":"430-45757f.png","id":430},"f7e081":{"file":"431-f7e081.png","id":431},"faa847":{"file":"432-faa847.png","id":432},"e6bb1f":{"file":"433-e6bb1f.png","id":433},"e6b558":{"file":"434-e6b558.png","id":434},"a56e34":{"file":"435-a56e34.png","id":435},"c38f30":{"file":"436-c38f30.png","id":436},"e2a84c":{"file":"437-e2a84c.png","id":437},"885e2b":{"file":"438-885e2b.png","id":438},"b28f86":{"file":"439-b28f86.png","id":439},"bdaea6":{"file":"440-bdaea6.png","id":440},"4f4529":{"file":"441-4f4529.png","id":441},"573c31":{"file":"442-573c31.png","id":442},"564832":{"file":"443-564832.png","id":443},"292f28":{"file":"444-292f28.png","id":444},"314235":{"file":"445-314235.png","id":445},"495546":{"file":"446-495546.png","id":446},"87a8bc":{"file":"447-87a8bc.png","id":447},"98b7c9":{"file":"448-98b7c9.png","id":448},"9ecccf":{"file":"449-9ecccf.png","id":449},"8fbcd4":{"file":"450-8fbcd4.png","id":450},"f99f3e":{"file":"451-f99f3e.png","id":451},"f6d02a":{"file":"452-f6d02a.png","id":452},"d1a254":{"file":"453-d1a254.png","id":453},"a26b28":{"file":"454-a26b28.png","id":454},"846131":{"file":"455-846131.png","id":455},"a4723e":{"file":"456-a4723e.png","id":456},"87672e":{"file":"457-87672e.png","id":457},"987976":{"file":"458-987976.png","id":458},"b79a91":{"file":"459-b79a91.png","id":459},"7c736d":{"file":"460-7c736d.png","id":460},"5e4e2f":{"file":"461-5e4e2f.png","id":461},"4d4120":{"file":"462-4d4120.png","id":462},"413b23":{"file":"463-413b23.png","id":463},"635432":{"file":"464-635432.png","id":464},"98b9c6":{"file":"465-98b9c6.png","id":465},"a1b8c6":{"file":"466-a1b8c6.png","id":466},"93b8c4":{"file":"467-93b8c4.png","id":467},"a1b9bb":{"file":"468-a1b9bb.png","id":468},"b5beb1":{"file":"469-b5beb1.png","id":469},"cfcfce":{"file":"470-cfcfce.png","id":470},"f7cd1d":{"file":"471-f7cd1d.png","id":471},"af8a35":{"file":"472-af8a35.png","id":472},"bd8139":{"file":"473-bd8139.png","id":473},"946b42":{"file":"474-946b42.png","id":474},"8d6948":{"file":"475-8d6948.png","id":475},"95724c":{"file":"476-95724c.png","id":476},"b48fa1":{"file":"477-b48fa1.png","id":477},"6e5b5d":{"file":"478-6e5b5d.png","id":478},"a39594":{"file":"479-a39594.png","id":479},"8a7b70":{"file":"480-8a7b70.png","id":480},"564826":{"file":"481-564826.png","id":481},"50412a":{"file":"482-50412a.png","id":482},"46402a":{"file":"483-46402a.png","id":483},"504b36":{"file":"484-504b36.png","id":484},"434327":{"file":"485-434327.png","id":485},"7a9ea4":{"file":"486-7a9ea4.png","id":486},"899692":{"file":"487-899692.png","id":487},"a7b0a3":{"file":"488-a7b0a3.png","id":488},"a3b9b2":{"file":"489-a3b9b2.png","id":489},"babfbb":{"file":"490-babfbb.png","id":490},"d98f28":{"file":"491-d98f28.png","id":491},"c88443":{"file":"492-c88443.png","id":492},"a77329":{"file":"493-a77329.png","id":493},"916c29":{"file":"494-916c29.png","id":494},"6e523c":{"file":"495-6e523c.png","id":495},"998598":{"file":"496-998598.png","id":496},"c0ad9d":{"file":"497-c0ad9d.png","id":497},"c8b8b5":{"file":"498-c8b8b5.png","id":498},"6c6c63":{"file":"499-6c6c63.png","id":499},"565459":{"file":"500-565459.png","id":500},"967d59":{"file":"501-967d59.png","id":501},"847554":{"file":"502-847554.png","id":502},"9a7749":{"file":"503-9a7749.png","id":503},"796044":{"file":"504-796044.png","id":504},"6a584a":{"file":"505-6a584a.png","id":505},"434947":{"file":"506-434947.png","id":506},"42423c":{"file":"507-42423c.png","id":507},"464741":{"file":"508-464741.png","id":508},"788475":{"file":"509-788475.png","id":509},"7d8075":{"file":"510-7d8075.png","id":510},"a15c26":{"file":"511-a15c26.png","id":511},"905924":{"file":"512-905924.png","id":512},"906a3b":{"file":"513-906a3b.png","id":513},"997c9b":{"file":"514-997c9b.png","id":514},"a6989e":{"file":"515-a6989e.png","id":515},"a5978c":{"file":"516-a5978c.png","id":516},"9d8e86":{"file":"517-9d8e86.png","id":517},"626169":{"file":"518-626169.png","id":518},"5e5d65":{"file":"519-5e5d65.png","id":519},"454446":{"file":"520-454446.png","id":520},"7d6646":{"file":"521-7d6646.png","id":521},"8e7145":{"file":"522-8e7145.png","id":522},"785f4c":{"file":"523-785f4c.png","id":523},"887651":{"file":"524-887651.png","id":524},"6f6450":{"file":"525-6f6450.png","id":525},"373e39":{"file":"527-373e39.png","id":527},"434942":{"file":"528-434942.png","id":528},"6f7062":{"file":"529-6f7062.png","id":529},"65725c":{"file":"530-65725c.png","id":530},"8f6329":{"file":"531-8f6329.png","id":531},"a56227":{"file":"532-a56227.png","id":532},"65596d":{"file":"533-65596d.png","id":533},"a78ea1":{"file":"534-a78ea1.png","id":534},"9998b7":{"file":"535-9998b7.png","id":535},"a7a39e":{"file":"536-a7a39e.png","id":536},"8f8a8e":{"file":"537-8f8a8e.png","id":537},"635e65":{"file":"538-635e65.png","id":538},"504a4a":{"file":"539-504a4a.png","id":539},"3d3e42":{"file":"540-3d3e42.png","id":540},"7b6244":{"file":"541-7b6244.png","id":541},"6e5840":{"file":"542-6e5840.png","id":542},"624d35":{"file":"543-624d35.png","id":543},"473e30":{"file":"544-473e30.png","id":544},"493922":{"file":"545-493922.png","id":545},"5c5444":{"file":"546-5c5444.png","id":546},"413d32":{"file":"547-413d32.png","id":547},"4e4d3e":{"file":"548-4e4d3e.png","id":548},"a5a497":{"file":"549-a5a497.png","id":549},"878a79":{"file":"550-878a79.png","id":550},"494036":{"file":"551-494036.png","id":551},"493e55":{"file":"552-493e55.png","id":552},"574768":{"file":"553-574768.png","id":553},"6a6684":{"file":"554-6a6684.png","id":554},"8a888b":{"file":"555-8a888b.png","id":555},"63646e":{"file":"556-63646e.png","id":556},"464543":{"file":"557-464543.png","id":557},"403f3f":{"file":"558-403f3f.png","id":558},"42424b":{"file":"559-42424b.png","id":559},"333134":{"file":"560-333134.png","id":560},"655139":{"file":"561-655139.png","id":561},"625038":{"file":"562-625038.png","id":562},"4a4332":{"file":"563-4a4332.png","id":563},"4e3f26":{"file":"564-4e3f26.png","id":564},"765b2f":{"file":"565-765b2f.png","id":565},"5f5949":{"file":"566-5f5949.png","id":566},"675d50":{"file":"567-675d50.png","id":567},"78756c":{"file":"568-78756c.png","id":568},"d0ad9e":{"file":"569-d0ad9e.png","id":569},"b4a087":{"file":"570-b4a087.png","id":570},"44384c":{"file":"571-44384c.png","id":571},"513d48":{"file":"572-513d48.png","id":572},"5a4e64":{"file":"573-5a4e64.png","id":573},"ccb4a9":{"file":"574-ccb4a9.png","id":574},"b1a3a2":{"file":"575-b1a3a2.png","id":575},"777379":{"file":"576-777379.png","id":576},"393936":{"file":"577-393936.png","id":577},"3b3745":{"file":"578-3b3745.png","id":578},"4c464d":{"file":"579-4c464d.png","id":579},"141416":{"file":"580-141416.png","id":580},"4c4130":{"file":"581-4c4130.png","id":581},"322e25":{"file":"582-322e25.png","id":582},"4e3c26":{"file":"583-4e3c26.png","id":583},"6d5332":{"file":"584-6d5332.png","id":584},"83662d":{"file":"585-83662d.png","id":585},"716960":{"file":"586-716960.png","id":586},"746e58":{"file":"587-746e58.png","id":587},"beb09d":{"file":"588-beb09d.png","id":588},"c5b2a4":{"file":"589-c5b2a4.png","id":589},"ccb7a4":{"file":"590-ccb7a4.png","id":590},"392e3f":{"file":"591-392e3f.png","id":591},"533b48":{"file":"592-533b48.png","id":592},"a4a2af":{"file":"593-a4a2af.png","id":593},"b3a3a3":{"file":"594-b3a3a3.png","id":594},"726d71":{"file":"595-726d71.png","id":595},"585a5e":{"file":"596-585a5e.png","id":596},"313036":{"file":"597-313036.png","id":597},"2b2a2d":{"file":"598-2b2a2d.png","id":598},"141718":{"file":"599-141718.png","id":599},"131617":{"file":"600-131617.png","id":600}}';
     $sw = json_decode($sw, true);
     foreach ($sw as $k => $v) {
         $bg = new Imagick();
         $bg->newImage(100, 136, new ImagickPixel("#" . $k));
         $bg->setimageformat('png');
         $fl = new Imagick("img/ARS_300.png");
         $fl->compositeimage($bg, \Imagick::COMPOSITE_MULTIPLY, 0, 0);
         $fl->mergeimagelayers(Imagick::LAYERMETHOD_COALESCE);
         $fl->compositeimage(new Imagick("img/ARS_300.png"), \Imagick::COMPOSITE_COPYOPACITY, 0, 0, Imagick::CHANNEL_ALPHA);
         $fl->scaleimage(0, 60);
         $fl->setimageformat("png");
         $fl->setImageFileName("tom/" . $k . ".png");
         $fl->setinterlacescheme(\Imagick::INTERLACE_PNG);
         $fl->writeimage();
         $fl->destroy();
     }
     exit;
 }
 public function createThali($dishArray = array(), $is_thali, $w = 140, $h = 0)
 {
     Configure::write('debug', 2);
     ini_set("max_execution_time", -1);
     $thali1 = new Imagick("tmpl/img/thali-1.png");
     $thali2 = new Imagick("tmpl/img/thali-2.png");
     $thali3 = new Imagick("tmpl/img/thali-3.png");
     $mask_1 = new Imagick("tmpl/img/thali-mask2.png");
     $mask_2 = new Imagick("tmpl/img/thali-mask3.png");
     if (!is_array($dishArray)) {
         return false;
     }
     $mask_cnt = 0;
     foreach ($dishArray as $dish) {
         if ($mask_cnt > 1) {
             // Mask Locking (Modify if masks will be increased or decreased)
             break;
         }
         $dish = new Imagick($dish);
         $dish->scaleimage($thali1->getimagewidth(), $thali1->getimageheight());
         // Set As per bowl image
         if ($is_thali) {
             if ($mask_cnt == 1) {
                 $dish->rotateimage("#fff", 180);
             }
             $dish->compositeimage(new Imagick("tmpl/img/thali-mask" . ($mask_cnt + 2) . ".png"), \Imagick::COMPOSITE_COPYOPACITY, 0, 0, Imagick::CHANNEL_ALPHA);
             $dish->mergeimagelayers(Imagick::LAYERMETHOD_COALESCE);
             $thali1->compositeimage($dish, \Imagick::COMPOSITE_ATOP, 0, 0, Imagick::CHANNEL_ALPHA);
             $thali1->mergeimagelayers(Imagick::LAYERMETHOD_COALESCE);
             $thali2->compositeimage($dish, \Imagick::COMPOSITE_ATOP, 0, 0, Imagick::CHANNEL_ALPHA);
             $thali2->mergeimagelayers(Imagick::LAYERMETHOD_COALESCE);
             $thali3->compositeimage($dish, \Imagick::COMPOSITE_ATOP, 0, 0, Imagick::CHANNEL_ALPHA);
             $thali3->mergeimagelayers(Imagick::LAYERMETHOD_COALESCE);
         } else {
             $thali3 = $dish;
         }
         $mask_cnt++;
     }
     $url = "files/thali_images/" . $this->randomString(6);
     $url_end = "-Thali.jpg";
     $result_urls = array();
     $thali1->setimageformat("jpg");
     $thali1->setImageFileName($result_urls[] = $url . "-0" . $url_end);
     $thali1->scaleimage($w, $h);
     if ($is_thali) {
         $thali2->writeimage();
     }
     $thali1->destroy();
     $thali2->setimageformat("jpg");
     $thali2->setImageFileName($result_urls[] = $url . "-1" . $url_end);
     $thali2->scaleimage($w, $h);
     if ($is_thali) {
         $thali2->writeimage();
     }
     $thali2->destroy();
     $thali3->setimageformat("jpg");
     $thali3->setImageFileName($result_urls[] = $url . "-2" . $url_end);
     $thali3->scaleimage($w, $h);
     $thali3->writeimage();
     $thali3->destroy();
     return $result_urls;
 }
Exemple #3
0
 /**
  * @param \Imagick $imagick
  * @param int $graphWidth
  * @param int $graphHeight
  */
 public static function analyzeImage(\Imagick $imagick, $graphWidth = 255, $graphHeight = 127)
 {
     $sampleHeight = 20;
     $border = 2;
     $imagick->transposeImage();
     $imagick->scaleImage($graphWidth, $sampleHeight);
     $imageIterator = new \ImagickPixelIterator($imagick);
     $luminosityArray = [];
     foreach ($imageIterator as $row => $pixels) {
         /* Loop through pixel rows */
         foreach ($pixels as $column => $pixel) {
             /* Loop through the pixels in the row (columns) */
             /** @var $pixel \ImagickPixel */
             if (false) {
                 $color = $pixel->getColor();
                 $luminosityArray[] = $color['r'];
             } else {
                 $hsl = $pixel->getHSL();
                 $luminosityArray[] = $hsl['luminosity'];
             }
         }
         /* Sync the iterator, this is important to do on each iteration */
         $imageIterator->syncIterator();
         break;
     }
     $draw = new \ImagickDraw();
     $strokeColor = new \ImagickPixel('red');
     $fillColor = new \ImagickPixel('red');
     $draw->setStrokeColor($strokeColor);
     $draw->setFillColor($fillColor);
     $draw->setStrokeWidth(0);
     $draw->setFontSize(72);
     $draw->setStrokeAntiAlias(true);
     $previous = false;
     $x = 0;
     foreach ($luminosityArray as $luminosity) {
         $pos = $graphHeight - 1 - $luminosity * ($graphHeight - 1);
         if ($previous !== false) {
             /** @var $previous int */
             //printf ( "%d, %d, %d, %d <br/>\n" , $x - 1, $previous, $x, $pos);
             $draw->line($x - 1, $previous, $x, $pos);
         }
         $x += 1;
         $previous = $pos;
     }
     $plot = new \Imagick();
     $plot->newImage($graphWidth, $graphHeight, 'white');
     $plot->drawImage($draw);
     $outputImage = new \Imagick();
     $outputImage->newImage($graphWidth, $graphHeight + $sampleHeight, 'white');
     $outputImage->compositeimage($plot, \Imagick::COMPOSITE_ATOP, 0, 0);
     $outputImage->compositeimage($imagick, \Imagick::COMPOSITE_ATOP, 0, $graphHeight);
     $outputImage->borderimage('black', $border, $border);
     $outputImage->setImageFormat("png");
     App::cachingHeader("Content-Type: image/png");
     echo $outputImage;
 }
Exemple #4
0
 function imagick_thumbnail($image, $timage, $ext, $thumbnail_name, $imginfo)
 {
     try {
         $imagick = new Imagick();
         $fullpath = "./" . $this->thumbnail_path . "/" . $timage[0] . "/" . $thumbnail_name;
         if ($ext == "gif") {
             $imagick->readImage($image . '[0]');
         } else {
             $imagick->readImage($image);
         }
         $info = $imagick->getImageGeometry();
         $this->info[0] = $info['width'];
         $this->info[1] = $info['height'];
         $imagick->thumbnailImage($this->dimension, $this->dimension, true);
         if ($ext == "png" || $ext == "gif") {
             $white = new Imagick();
             $white->newImage($this->dimension, $this->dimension, "white");
             $white->compositeimage($image, Imagick::COMPOSITE_OVER, 0, 0);
             $white->writeImage($fullpath);
             $white->clear();
         } else {
             $imagick->writeImage($fullpath);
         }
         $imagick->clear();
     } catch (Exception $e) {
         echo "Unable to load image." . $e->getMessage();
         return false;
     }
     return true;
 }
function getSilhouette(\Imagick $imagick)
{
    $character = new \Imagick();
    $character->newPseudoImage($imagick->getImageWidth(), $imagick->getImageHeight(), "canvas:white");
    $canvas = new \Imagick();
    $canvas->newPseudoImage($imagick->getImageWidth(), $imagick->getImageHeight(), "canvas:black");
    $character->compositeimage($imagick, \Imagick::COMPOSITE_COPYOPACITY, 0, 0);
    $canvas->compositeimage($character, \Imagick::COMPOSITE_ATOP, 0, 0);
    $canvas->setFormat('png');
    return $canvas;
}
 public function renderCustomImage()
 {
     $size = 200;
     $imagick1 = new \Imagick();
     $imagick1->newPseudoImage($size, $size, 'gradient:black-white');
     $arguments = array(9, -90);
     $imagick1->functionImage(\Imagick::FUNCTION_SINUSOID, $arguments);
     $imagick2 = new \Imagick();
     $imagick2->newPseudoImage($size, $size, 'gradient:black-white');
     $arguments = array(0.5, 0);
     $imagick2->functionImage(\Imagick::FUNCTION_SINUSOID, $arguments);
     $imagick1->compositeimage($imagick2, \Imagick::COMPOSITE_MULTIPLY, 0, 0);
     $imagick1->setimageformat('png');
     header("Content-Type: image/png");
     echo $imagick1->getImageBlob();
 }
Exemple #7
0
 /**
  * 
  * @param string $dishUrl
  * @param int $w Width of the Output Image
  * @param int $h Height of Output Image
  * @return string Path of genrated Image
  */
 public function createBowl($dishUrl = null, $w = 140, $h = 0)
 {
     $bowl = new Imagick("tmpl/img/bowl.png");
     $mask = new Imagick("tmpl/img/mask.png");
     $dish = new Imagick($dishUrl);
     $dish->scaleimage($bowl->getimagewidth(), $bowl->getimageheight());
     // Set As per bowl image
     $dish->compositeimage(new Imagick("tmpl/img/mask.png"), \Imagick::COMPOSITE_COPYOPACITY, 0, 0, Imagick::CHANNEL_ALPHA);
     $dish->mergeimagelayers(Imagick::LAYERMETHOD_COALESCE);
     $bowl->compositeimage($dish, \Imagick::COMPOSITE_ATOP, 0, 0, Imagick::CHANNEL_ALPHA);
     $bowl->mergeimagelayers(Imagick::LAYERMETHOD_COALESCE);
     $bowl->setimageformat("jpg");
     $bowl->setImageFileName($url = "img_tmp/" . $this->randomString(10) . "-GE.jpg");
     //    $bowl->setinterlacescheme(\Imagick::INTERLACE_PNG);
     $bowl->scaleimage($w, $h);
     $bowl->writeimage();
     $bowl->destroy();
     return $url;
 }
Exemple #8
0
function createBowl($dishUrl = null, $w = 140, $h = 0)
{
    $du = explode("/", $dishUrl);
    $du = explode(".", $du[count($du) - 1]);
    $uri = $du[count($du) - 2];
    $bowl = new Imagick("img/bowl.png");
    $mask = new Imagick("img/mask.png");
    $dish = new Imagick($dishUrl);
    $dish->scaleimage($bowl->getimagewidth(), $bowl->getimageheight());
    // Set As per bowl image
    $dish->compositeimage(new Imagick("img/mask.png"), \Imagick::COMPOSITE_COPYOPACITY, 0, 0, Imagick::CHANNEL_ALPHA);
    $dish->mergeimagelayers(Imagick::LAYERMETHOD_COALESCE);
    $bowl->compositeimage($dish, \Imagick::COMPOSITE_ATOP, 0, 0, Imagick::CHANNEL_ALPHA);
    $bowl->mergeimagelayers(Imagick::LAYERMETHOD_COALESCE);
    $bowl->setimageformat("jpg");
    $bowl->setImageFileName($url = "gen/" . $uri . ".jpg");
    //    $bowl->setinterlacescheme(\Imagick::INTERLACE_PNG);
    $bowl->scaleimage($w, $h);
    $bowl->writeimage();
    $bowl->destroy();
    return $url;
}
Exemple #9
0
 private function getCharacterOutline()
 {
     //Example ImagickKernel::morphology
     $imagick = new \Imagick(realpath("./images/character.png"));
     $character = new \Imagick();
     $character->newPseudoImage($imagick->getImageWidth(), $imagick->getImageHeight(), "canvas:white");
     $canvas = new \Imagick();
     $canvas->newPseudoImage($imagick->getImageWidth(), $imagick->getImageHeight(), "canvas:black");
     $character->compositeimage($imagick, \Imagick::COMPOSITE_COPYOPACITY, 0, 0);
     $canvas->compositeimage($character, \Imagick::COMPOSITE_ATOP, 0, 0);
     $canvas->setFormat('png');
     return $canvas;
     //Example end
 }
Exemple #10
0
 /**
  * Load up an image from a filename
  * 
  * @param string $imgPath The path to the image to load, or null to skip
  * 			loading the image (some other functions are available for
  * 			populating the data). Supported graphics types depend on your PHP configuration.
  */
 public function __construct($imgPath = null)
 {
     /* Can't use bitmaps yet */
     $this->imgBmpData = null;
     $this->imgRasterData = null;
     if ($imgPath === null) {
         // Blank image
         $this->imgHeight = 0;
         $this->imgWidth = 0;
         $this->imgData = "";
         return;
     }
     /* Load up using GD */
     if (!file_exists($imgPath)) {
         throw new Exception("File '{$imgPath}' does not exist.");
     }
     $ext = pathinfo($imgPath, PATHINFO_EXTENSION);
     if ($ext == "bmp") {
         // The plan is to implement BMP handling directly in
         // PHP, as some printers understand this format themselves.
         // TODO implement PHP bitmap handling
         throw new Exception("Native bitmaps not yet supported. Please convert the file to a supported raster format.");
     }
     if ($this->isGdSupported()) {
         // Prefer to use gd. It is installed by default, so
         // most systems will have it, giving a consistent UX.
         switch ($ext) {
             case "png":
                 $im = @imagecreatefrompng($imgPath);
                 $this->readImageFromGdResource($im);
                 return;
             case "jpg":
                 $im = @imagecreatefromjpeg($imgPath);
                 $this->readImageFromGdResource($im);
                 return;
             case "gif":
                 $im = @imagecreatefromgif($imgPath);
                 $this->readImageFromGdResource($im);
                 return;
         }
     }
     if ($this->isImagickSupported()) {
         $im = new Imagick();
         try {
             // Throws an ImagickException if the format is not supported or file is not found
             $im->readImage($imgPath);
         } catch (ImagickException $e) {
             // Wrap in normal exception, so that classes which call this do not themselves require imagick as a dependency.
             throw new Exception($e);
         }
         /* Flatten by doing a composite over white, in case of transparency */
         $flat = new Imagick();
         $flat->newImage($im->getimagewidth(), $im->getimageheight(), "white");
         $flat->compositeimage($im, Imagick::COMPOSITE_OVER, 0, 0);
         $this->readImageFromImagick($flat);
         return;
     }
     throw new Exception("Images are not supported on your PHP. Please install either the gd or imagick extension.");
 }
 /**
  * @param null $frameWidth
  * @param null $frameHeight
  * @throws Exception
  */
 public function resize($frameWidth = null, $frameHeight = null)
 {
     if (empty($frameWidth) && empty($frameHeight)) {
         throw new Exception('Invalid image dimensions.');
     }
     Varien_Profiler::start(__METHOD__);
     $imagick = $this->getImageMagick();
     // calculate lacking dimension
     $origWidth = $imagick->getImageWidth();
     $origHeight = $imagick->getImageHeight();
     if ($this->keepFrame() === TRUE) {
         if (null === $frameWidth) {
             $frameWidth = $frameHeight;
         } elseif (null === $frameHeight) {
             $frameHeight = $frameWidth;
         }
     } else {
         if (null === $frameWidth) {
             $frameWidth = round($frameHeight * ($origWidth / $origHeight));
         } elseif (null === $frameHeight) {
             $frameHeight = round($frameWidth * ($origHeight / $origWidth));
         }
     }
     if ($this->_keepAspectRatio && $this->_constrainOnly) {
         if ($frameWidth >= $origWidth && $frameHeight >= $origHeight) {
             $frameWidth = $origWidth;
             $frameHeight = $origHeight;
         }
     }
     // Resize
     $imagick->setimageinterpolatemethod(imagick::INTERPOLATE_BICUBIC);
     $imagick->scaleimage($frameWidth, $frameHeight, true);
     // Fill desired canvas
     if ($this->keepFrame() === TRUE && $frameWidth != $origWidth && $frameHeight != $origHeight) {
         $composite = new Imagick();
         $color = $this->_backgroundColor;
         if ($color && is_array($color) && count($color) == 3) {
             $bgColor = new ImagickPixel('rgb(' . implode(',', $color) . ')');
         } else {
             $bgColor = new ImagickPixel('white');
         }
         $composite->newimage($frameWidth, $frameHeight, $bgColor);
         $composite->setimageformat($imagick->getimageformat());
         if ($imagick->getimagecolorspace() == Imagick::COLORSPACE_CMYK) {
             $profiles = $imagick->getimageprofiles('*', false);
             // we're only interested if ICC profile(s) exist
             $has_icc_profile = array_search('icc', $profiles) !== false;
             // if it doesnt have a CMYK ICC profile, we add one
             if ($has_icc_profile === false) {
                 $icc_cmyk = file_get_contents(__DIR__ . '/icc_profiles/USWebUncoated.icc');
                 $imagick->profileImage('icc', $icc_cmyk);
                 unset($icc_cmyk);
             }
             // then we add an RGB profile
             $icc_rgb = file_get_contents(__DIR__ . '/icc_profiles/sRGB.icc');
             $imagick->profileImage('icc', $icc_rgb);
             unset($icc_rgb);
             $imagick->setimagecolorspace(Imagick::COLORSPACE_SRGB);
         }
         $composite->setimagecolorspace($imagick->getimagecolorspace());
         $dstX = floor(($frameWidth - $imagick->getimagewidth()) / 2);
         $dstY = floor(($frameHeight - $imagick->getimageheight()) / 2);
         $composite->compositeimage($imagick, Imagick::COMPOSITE_OVER, $dstX, $dstY);
         $this->_imageHandler = $composite;
         $imagick->clear();
         $imagick->destroy();
     }
     $this->refreshImageDimensions();
     Varien_Profiler::stop(__METHOD__);
 }
 /**
  * 
  */
 function renderCustomImageCreases()
 {
     $tshirt = new \Imagick(realpath("images/tshirt/tshirt.jpg"));
     $logo = new \Imagick(realpath("images/tshirt/Logo.png"));
     $logo->resizeImage(100, 100, \Imagick::FILTER_LANCZOS, 1, TRUE);
     $tshirt->setImageFormat('png');
     //First lets find the creases
     //Get the average color of the tshirt and make a new image from it.
     $colorString = getAverageColorString($tshirt);
     $creases = new \Imagick();
     $creases->newpseudoimage($tshirt->getImageWidth(), $tshirt->getImageHeight(), "XC:" . $colorString);
     //Composite difference finds the creases
     $creases->compositeimage($tshirt, \Imagick::COMPOSITE_DIFFERENCE, 0, 0);
     $creases->setImageFormat('png');
     //We need the image negated for the maths to work later.
     $creases->negateimage(true);
     //We also want "no crease" to equal 50% gray later
     //$creases->brightnessContrastImage(-50, 0);
     $creases->modulateImage(50, 100, 100);
     //Copy the logo into an image the same size as the shirt image
     //to make life easier
     $logoCentre = new \Imagick();
     $logoCentre->newpseudoimage($tshirt->getImageWidth(), $tshirt->getImageHeight(), "XC:none");
     $logoCentre->setImageFormat('png');
     $logoCentre->compositeimage($logo, \Imagick::COMPOSITE_SRCOVER, 110, 75);
     //Save a copy of the tshirt sized logo
     $logoCentreMask = clone $logoCentre;
     //Blend the creases with the logo
     $logoCentre->compositeimage($creases, \Imagick::COMPOSITE_MODULATE, 0, 0);
     //Mask the logo so that only the pixels under the logo come through
     $logoCentreMask->compositeimage($logoCentre, \Imagick::COMPOSITE_SRCIN, 0, 0);
     //Composite the creased logo onto the shirt
     $tshirt->compositeimage($logoCentreMask, \Imagick::COMPOSITE_DEFAULT, 0, 0);
     //And Robert is your father's brother
     header("Content-Type: image/png");
     echo $tshirt->getImageBlob();
 }
Exemple #13
0
 /**
  * Load actual image pixels from \Imagick object
  * 
  * @param Imagick $im Image to load from
  */
 public function readImageFromImagick(\Imagick $im)
 {
     /* Strip transparency */
     $flat = new \Imagick();
     $flat->newImage($im->getimagewidth(), $im->getimageheight(), "white");
     $flat->compositeimage($im, \Imagick::COMPOSITE_OVER, 0, 0);
     $im = $flat;
     /* Threshold */
     $im->setImageType(\Imagick::IMGTYPE_TRUECOLOR);
     // Remove transparency (good for PDF's)
     $max = $im->getQuantumRange();
     $max = $max["quantumRangeLong"];
     $im->thresholdImage(0.5 * $max);
     /* Make a string of 1's and 0's */
     $geometry = $im->getimagegeometry();
     $this->imgHeight = $im->getimageheight();
     $this->imgWidth = $im->getimagewidth();
     $this->imgData = str_repeat("", $this->imgHeight * $this->imgWidth);
     for ($y = 0; $y < $this->imgHeight; $y++) {
         for ($x = 0; $x < $this->imgWidth; $x++) {
             /* Faster to average channels, blend alpha and negate the image here than via filters (tested!) */
             $cols = $im->getImagePixelColor($x, $y);
             $cols = $cols->getcolor();
             $greyness = (int) (($cols['r'] + $cols['g'] + $cols['b']) / 3) >> 7;
             // 1 for white, 0 for black
             $this->imgData[$y * $this->imgWidth + $x] = 1 - $greyness;
             // 1 for black, 0 for white
         }
     }
 }
$site = addhttp($site);
$blankPhone = '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';
$image = file_get_contents("https://www.googleapis.com/pagespeedonline/v1/runPagespeed?url={$site}&screenshot=true&strategy=mobile");
$image = json_decode($image, true);
$image = $image['screenshot']['data'];
$image = str_replace(array('_', '-'), array('/', '+'), $image);
$imageBlob = base64_decode($image);
$im = new Imagick();
$im->readImageBlob($imageBlob);
$im->setImageFormat('png');
$im->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);
$im->setImageMatte(true);
$controlPoints = array(0, 0, 100, 127, 320, 0, 392, 8, 0, 533, 348, 577, 320, 533, 658, 433);
$im->distortImage(Imagick::DISTORTION_PERSPECTIVE, $controlPoints, true);
$output = new Imagick();
$phoneBlob = base64_decode($blankPhone);
$output->readImageBlob($phoneBlob);
$output->setImageFormat('png');
$output->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);
$output->compositeimage($im->getimage(), $output->getImageCompose(), 130, 88);
$output->flattenImages();
function addhttp($url)
{
    if (!preg_match("~^(?:f|ht)tps?://~i", $url)) {
        $url = "http://" . $url;
    }
    return $url;
}
//header("Content-Type: image/png");
//echo $output;
echo '<img class="headerPic" src="data:image/jpg;base64,' . base64_encode($output) . '" alt="" />';
 private function genImgRunner($rugpngs, $colors = array(), $location = "files/temp/")
 {
     if (is_file($location . "runner.png")) {
         return $location;
     }
     ini_set("max_execution_time", -1);
     $layers = array();
     $bg = null;
     foreach ($rugpngs as $rp) {
         if ($rp['type'] == "LAYER") {
             $layers[] = new Imagick($rp['path']);
         } else {
             $bg = new Imagick($rp['path']);
         }
     }
     if ($bg == NULL) {
         $bg = new Imagick();
         $bg->newImage(910, 475, new ImagickPixel('none'));
         $bg->setimageformat('png');
     }
     foreach ($layers as $layer) {
         //$layer->resizeImage(910, 475, Imagick::FILTER_LANCZOS, 1, TRUE);
         $layer->setimageformat("png");
     }
     $bg->resizeImage($layer->getimagewidth(), $layer->getimageheight(), Imagick::FILTER_LANCZOS, 1, TRUE);
     $bg->setimageformat("png");
     $cnt_a = 0;
     foreach ($layers as $layer) {
         $layer->paintopaqueimage(new ImagickPixel('#000'), $colors[$cnt_a], 900000);
         $bg->compositeimage($layer, \Imagick::COMPOSITE_MULTIPLY, 0, 0);
         $cnt_a++;
         $layer->destroy();
     }
     $bg->mergeimagelayers(Imagick::LAYERMETHOD_COALESCE);
     $bg = $this->getBgPresp($bg, 60);
     $rnd = new Imagick("files/templates/new/runner/angle.png");
     $bg->scaleimage(0, $rnd->getimageheight());
     $rnd->compositeimage($bg, \Imagick::COMPOSITE_MULTIPLY, 0, 0);
     $rnd->mergeimagelayers(Imagick::LAYERMETHOD_COALESCE);
     $rnd->compositeimage(new Imagick("files/templates/new/runner/angle_trim.png"), \Imagick::COMPOSITE_COPYOPACITY, 0, 0, Imagick::CHANNEL_ALPHA);
     $rnd->setimageformat("png");
     $rnd->setImageFileName($location . "runner.png");
     $rnd->setinterlacescheme(\Imagick::INTERLACE_PNG);
     $rnd->scaleimage(733, 0);
     $rnd->writeimage();
     $rnd->destroy();
     $rnd = new Imagick("files/templates/new/runner/flip.png");
     $bg->scaleimage(0, $rnd->getimageheight());
     $rnd->compositeimage($bg, \Imagick::COMPOSITE_MULTIPLY, 0, 0);
     $rnd->mergeimagelayers(Imagick::LAYERMETHOD_COALESCE);
     $rnd->compositeimage(new Imagick("files/templates/new/runner/flip_trim.png"), \Imagick::COMPOSITE_COPYOPACITY, 0, 0, Imagick::CHANNEL_ALPHA);
     $rnd->mergeimagelayers(Imagick::LAYERMETHOD_COALESCE);
     $rnd->compositeimage(new Imagick("files/templates/new/runner/flip.png"), \Imagick::COMPOSITE_DSTOVER, 0, 0, Imagick::CHANNEL_ALPHA);
     $rnd->setimageformat("png");
     $rnd->setImageFileName($location . "runner1.png");
     $rnd->setinterlacescheme(\Imagick::INTERLACE_PNG);
     $rnd->scaleimage(733, 0);
     $rnd->writeimage();
     $rnd->destroy();
     $rnd = new Imagick("files/templates/new/runner/straight.png");
     $bg->scaleimage($rnd->getimagewidth(), 0);
     $rnd->compositeimage($bg, \Imagick::COMPOSITE_MULTIPLY, 0, 0);
     $rnd->mergeimagelayers(Imagick::LAYERMETHOD_COALESCE);
     $rnd->compositeimage(new Imagick("files/templates/new/runner/straight_trim.png"), \Imagick::COMPOSITE_COPYOPACITY, 0, 0, Imagick::CHANNEL_ALPHA);
     $rnd->setimageformat("png");
     $rnd->setImageFileName($location . "runner2.png");
     $rnd->setinterlacescheme(\Imagick::INTERLACE_PNG);
     $rnd->scaleimage(733, 0);
     $rnd->writeimage();
     $rnd->destroy();
     /*
      $rnd = new Imagick("files/templates/runner/runners-4.png");
      $rnd->compositeimage($bg, \Imagick::COMPOSITE_MULTIPLY, 0, 200);
      $rnd->mergeimagelayers(Imagick::LAYERMETHOD_COALESCE);
     
      $rnd->compositeimage(new Imagick("files/templates/runner/runners-4.png"), \Imagick::COMPOSITE_COPYOPACITY, 0, 0, Imagick::CHANNEL_ALPHA);
      $rnd->mergeimagelayers(Imagick::LAYERMETHOD_COALESCE);
      $rnd->compositeimage(new Imagick("files/templates/runner/runners-5.png"), \Imagick::COMPOSITE_DEFAULT, 0, 0, Imagick::CHANNEL_ALPHA);
      $rnd->setimageformat("png");
      $rnd->setImageFileName($location . "runner3.png");
      $rnd->writeimage();
      $rnd->destroy();
     */
     return $location;
 }
 public function createThali($dishArray = array(), $w = 140, $h = 0)
 {
     Configure::write('debug', 2);
     ini_set("max_execution_time", -1);
     $thali = new Imagick("tmpl/img/thali.png");
     $mask_1 = new Imagick("tmpl/img/thali-mask1.png");
     $mask_2 = new Imagick("tmpl/img/thali-mask2.png");
     $mask_3 = new Imagick("tmpl/img/thali-mask3.png");
     $mask_4 = new Imagick("tmpl/img/thali-mask4.png");
     $mask_5 = new Imagick("tmpl/img/thali-mask5.png");
     if (!is_array($dishArray)) {
         return false;
     }
     $mask_cnt = 0;
     foreach ($dishArray as $dish) {
         if ($mask_cnt > 4) {
             // Mask Locking (Modify if masks will be increased or decreased)
             break;
         }
         $dish = new Imagick($dish);
         if ($mask_cnt + 1 == 5) {
             $dish = new Imagick("tmpl/dishes/rice.jpg");
             // Fixed Rice for Mask No. 1
         }
         $dish->scaleimage($thali->getimagewidth(), $thali->getimageheight());
         // Set As per bowl image
         $dish->compositeimage(new Imagick("tmpl/img/thali-mask" . ($mask_cnt + 1) . ".png"), \Imagick::COMPOSITE_COPYOPACITY, 0, 0, Imagick::CHANNEL_ALPHA);
         $dish->mergeimagelayers(Imagick::LAYERMETHOD_COALESCE);
         $thali->compositeimage($dish, \Imagick::COMPOSITE_ATOP, 0, 0, Imagick::CHANNEL_ALPHA);
         $thali->mergeimagelayers(Imagick::LAYERMETHOD_COALESCE);
         $mask_cnt++;
     }
     $thali->setimageformat("jpg");
     $thali->setImageFileName($url = "files/thali_images/" . $this->randomString(6) . "-Thali.jpg");
     //    $thali->setinterlacescheme(\Imagick::INTERLACE_PNG);
     $thali->scaleimage($w, $h);
     $thali->writeimage();
     $thali->destroy();
     return $url;
 }
 public function generatePoolWall($color, $darken, $hue, $saturation)
 {
     $this->setColor($color);
     $this->setDarkenValue($darken);
     $this->setHueSaturationValue($hue, $saturation);
     $baseWall = new Imagick($this->wallImage);
     $wall = $this->colorizeWall();
     $baseWall->compositeimage($wall, Imagick::COMPOSITE_DEFAULT, 0, 0);
     $wall->clear();
     return $baseWall;
 }
Exemple #18
0
    static function nonImageAddTexte($text, $fontfile, $fontsize)
    {
        $svg = '<?xml version="1.0" encoding="utf-8"?>

<!-- The icon can be used freely in both personal and commercial projects with no attribution required, but always appreciated.
You may NOT sub-license, resell, rent, redistribute or otherwise transfer the icon without express written permission from iconmonstr.com -->

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="512px" height="512px" viewBox="0 0 512 512" xml:space="preserve">
<defs>
<linearGradient id="degrade" x1="100%" y1="0" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#898989; stop-opacity:0.2;"/>
<stop offset="40%" style="stop-color:#464646; stop-opacity:1;"/>
<stop offset="100%" style="stop-color:#111111; stop-opacity:0.7;"/>
</linearGradient>
<linearGradient id="degrade1" x1="100%" y1="0" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#111111; stop-opacity:0.7;"/>
<stop offset="40%" style="stop-color:#AAAAAA; stop-opacity:1;"/>
<stop offset="100%" style="stop-color:#F0F0F0; stop-opacity:0.2;"/>
</linearGradient>

<style type="text/css">
#stop1{ stop-color:chartreuse; stop-opacity:0.2; } #stop2{ stop-color:cornflowerblue; stop-opacity:1; } #stop3{ stop-color:chartreuse; stop-opacity:0.7; }

</style>
</defs>
<path style="fill:url(#degrade); stroke:#BBBBBB; stroke-width:2px;" id="video-icon" d="M50,60.345v391.311h412V60.345H50z M137.408,410.862H92.354v-38.747h45.055V410.862z M137.408,343.278
	H92.354v-38.747h45.055V343.278z M137.408,275.372H92.354v-38.747h45.055V275.372z M137.408,208.111H92.354v-38.748h45.055V208.111z
	 M137.408,140.526H92.354v-38.747h45.055V140.526z M337.646,410.862H177.961V275.694h159.685V410.862z M337.646,236.947H177.961
	V101.779h159.685V236.947z M423.253,410.862h-45.054v-38.747h45.054V410.862z M423.253,343.278h-45.054v-38.747h45.054V343.278z
	 M423.253,275.372h-45.054v-38.747h45.054V275.372z M423.253,208.111h-45.054v-38.748h45.054V208.111z M423.253,140.526h-45.054
	v-38.747h45.054V140.526z"/>
</svg>
';
        $im2 = new \Imagick();
        $im2->setBackgroundColor(new \ImagickPixel('transparent'));
        $im2->readimageblob($svg);
        $im2->setImageFormat("png");
        $im2->adaptiveResizeImage(140, 140);
        /*Optional, if you need to resize*/
        //return $im2->getimageblob();
        $im = new \Imagick();
        $im->newimage(260, 300, new \ImagickPixel('#999999'), "jpeg");
        $im->compositeimage($im2, \Imagick::COMPOSITE_DEFAULT, 60, 80);
        $widthmax = $im->getImageGeometry()["width"];
        $draw = new \ImagickDraw();
        /* On commence un nouveau masque nommé "gradient" */
        $draw->setFillColor('#FFFFFF');
        /* Font properties */
        $draw->setFont($fontfile);
        $draw->setFontSize($fontsize);
        $draw->setGravity(\Imagick::GRAVITY_NORTH);
        $words = explode(' ', $text);
        //Test si la fontsize n'est pas trop grosse pour un mot
        $i = 0;
        while ($i < count($words)) {
            $lineSize = $im->queryfontmetrics($draw, $words[$i])["textWidth"];
            if ($lineSize < $widthmax) {
                $i++;
            } else {
                $fontsize--;
                $draw->setFontSize($fontsize);
            }
        }
        $res = $words[0];
        for ($i = 1; $i < count($words); $i++) {
            $lineSize = $im->queryfontmetrics($draw, $res . " " . $words[$i]);
            if ($lineSize["textWidth"] < $widthmax) {
                $res .= " " . $words[$i];
            } else {
                $res .= "\n" . $words[$i];
            }
        }
        /* Create text */
        $im->annotateImage($draw, 0, 0, 0, $res);
        return $im->getimageblob();
    }
Exemple #19
0
 /**
  * 合并两张图片(把图二合并到图一来) (ImageMagick 有个奇怪的问题,第一次运行会有点慢)
  * TODO GIF动画
  * @param string $onePath
  *            需要合并的图片一
  * @param string $twoPath
  *            需要合并的图片二
  * @param string $dstPath
  *            合并后的保存地址
  * @param integer $x
  *            合并坐标轴x
  * @param integer $y
  *            合并坐标轴y
  * @return boolean
  */
 public function join($onePath, $twoPath, $dstPath, $x = 0, $y = 0)
 {
     $im1 = new Imagick();
     $im1->readimage($onePath);
     $im2 = new Imagick($twoPath);
     $im2->setimageformat('png');
     $composite = $im2->getImageCompose();
     $im1->compositeimage($im2, $composite, $x, $y);
     $im2->destroy();
     return $im1->writeImage($dstPath);
 }
 /**
  * @param null $frameWidth
  * @param null $frameHeight
  * @throws Exception
  */
 public function resize($frameWidth = null, $frameHeight = null)
 {
     if (empty($frameWidth) && empty($frameHeight)) {
         throw new Exception('Invalid image dimensions.');
     }
     Varien_Profiler::start(__METHOD__);
     $imagick = $this->getImageMagick();
     // calculate lacking dimension
     $origWidth = $imagick->getImageWidth();
     $origHeight = $imagick->getImageHeight();
     if ($this->keepFrame() === TRUE) {
         if (null === $frameWidth) {
             $frameWidth = $frameHeight;
         } elseif (null === $frameHeight) {
             $frameHeight = $frameWidth;
         }
     } else {
         if (null === $frameWidth) {
             $frameWidth = round($frameHeight * ($origWidth / $origHeight));
         } elseif (null === $frameHeight) {
             $frameHeight = round($frameWidth * ($origHeight / $origWidth));
         }
     }
     if ($this->_keepAspectRatio && $this->_constrainOnly) {
         if ($frameWidth >= $origWidth && $frameHeight >= $origHeight) {
             $frameWidth = $origWidth;
             $frameHeight = $origHeight;
         }
     }
     // Resize
     $imagick->setimageinterpolatemethod(imagick::INTERPOLATE_BICUBIC);
     $imagick->scaleimage($frameWidth, $frameHeight, true);
     // Fill desired canvas
     if ($this->keepFrame() === TRUE && $frameWidth != $origWidth && $frameHeight != $origHeight) {
         $composite = new Imagick();
         $color = $this->_backgroundColor;
         if ($color && is_array($color) && count($color) == 3) {
             $bgColor = new ImagickPixel('rgb(' . implode(',', $color) . ')');
         } else {
             $bgColor = new ImagickPixel('white');
         }
         $composite->newimage($frameWidth, $frameHeight, $bgColor);
         $composite->setimageformat($imagick->getimageformat());
         $composite->setimagecolorspace($imagick->getimagecolorspace());
         $dstX = floor(($frameWidth - $imagick->getimagewidth()) / 2);
         $dstY = floor(($frameHeight - $imagick->getimageheight()) / 2);
         $composite->compositeimage($imagick, Imagick::COMPOSITE_OVER, $dstX, $dstY);
         $this->_imageHandler = $composite;
         $imagick->clear();
         $imagick->destroy();
     }
     Varien_Profiler::stop(__METHOD__);
 }
Exemple #21
0
 function showImage(\Imagick $imagick1)
 {
     $backGround = new \Imagick();
     $backGround->newPseudoImage($imagick1->getImageWidth(), $imagick1->getImageHeight(), 'pattern:checkerboard');
     $backGround->compositeimage($imagick1, \Imagick::COMPOSITE_ATOP, 0, 0);
     $backGround->setImageFormat('png');
     header("Content-Type: image/png");
     echo $backGround->getImageBlob();
 }
 public static function process_pdf_page($post_id, $current_page, $page_number, $pdf_pages_number, $pdf_file_path, $pdf_upload_dir, $jpeg_resolution, $jpeg_compression_quality, $ratio)
 {
     $_img = new Imagick();
     $_img->setResolution($jpeg_resolution, $jpeg_resolution);
     $_img->readImage($pdf_file_path . '[' . ($current_page - 1) . ']');
     $_img->setImageCompression(Imagick::COMPRESSION_JPEG);
     $_img->resizeImage(1024, round(1024 / $ratio), Imagick::FILTER_BESSEL, 1, false);
     $_img->setImageCompressionQuality($jpeg_compression_quality);
     $_img->setImageFormat('jpg');
     //$_img->setImageInterlaceScheme(Imagick::INTERLACE_JPEG);
     $_img->transformImageColorspace(Imagick::COLORSPACE_SRGB);
     //$_img->setBackgroundColor(new ImagickPixel('#FFFFFF'));
     // Remove transparency, fill transparent areas with white rather than black.
     //$_img->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
     // Convert to RGB to prevent creating a jpg with CMYK colors.
     $white = new Imagick();
     $white->newImage(1024, round(1024 / $ratio), "white");
     $white->compositeimage($_img, Imagick::COMPOSITE_OVER, 0, 0);
     $white->setImageFormat('jpg');
     $white->setImageColorspace($_img->getImageColorspace());
     $white->writeImage($pdf_upload_dir . '/page-' . $page_number . '.jpg');
     $_img->resizeImage(76, round(76 / $ratio), Imagick::FILTER_BESSEL, 1, false);
     $white = new Imagick();
     $white->newImage(76, round(76 / $ratio), "white");
     $white->compositeimage($_img, Imagick::COMPOSITE_OVER, 0, 0);
     $white->setImageFormat('jpg');
     $white->setImageColorspace($_img->getImageColorspace());
     $white->writeImage($pdf_upload_dir . '-thumbs/page-' . $page_number . '-100x76.jpg');
     if ($current_page == 1) {
         $file = $pdf_upload_dir . '/page-' . $page_number . '.jpg';
         PdfLightViewer_Plugin::set_featured_image($post_id, $file, 'pdf-' . $post_id . '-page-' . $page_number . '.jpg');
     }
     $percent = $current_page / $pdf_pages_number * 100;
     update_post_meta($post_id, '_pdf-light-viewer-import-progress', $percent);
     update_post_meta($post_id, '_pdf-light-viewer-import-current-page', $current_page);
     $_img->destroy();
     unset($_img);
     return $percent;
 }