this(char[] file, int sizelimit) { filename=file.dup; gdImage *pic; int filesize=cast(int)getSize(file); void[] data=read(file); char[] extension=filename[rfind(filename, ".")+1..length]; if (icmp(extension, "png")==0) pic=gdImageCreateFromPngPtr(filesize, data); else if ((icmp(extension, "jpg")==0)||(icmp(extension, "jpeg")==0)) pic=gdImageCreateFromJpegPtr(filesize, data); else if (icmp(extension, "gif")==0) pic=gdImageCreateFromGifPtr(filesize, data); else { writeflnt("Was ", extension); assert (false); } delete data[]; uint thumb_x=sizelimit; uint thumb_y=sizelimit; if (pic.sx>pic.sy) thumb_y=cast(uint)(cast(float)sizelimit*(cast(float)pic.sy/cast(float)pic.sx)); else thumb_x=cast(uint)(cast(float)sizelimit*(cast(float)pic.sx/cast(float)pic.sy)); gdImage *tn=gdImageCreateTrueColor(thumb_x, thumb_y); gdImageCopyResampled(tn, pic, 0, 0, 0, 0, thumb_x, thumb_y, pic.sx, pic.sy); int size=0; void* buf=gdImagePngPtr(tn, &size); pngData.length=size; pngData[]=cast(char[])buf[0..size]; gdFree(buf); gdImageDestroy(tn); gdImageDestroy(pic); }