473,320 Members | 2,012 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,320 software developers and data experts.

Making thumbnails 'on the fly'.

I have a databse containing amongst other things many images stored as
BLOBS.

When listing, currently I download all the images full size and let he
browser do the reduction to thumbnails.

It's getting a little slow on long lists.

Is there anyway to take the data and scale it down on the fly to a
smaller image? I have plenty of processor power, just not much bandwidth.
The images are a mixture of GIF, JPEG and PNG.
Feb 16 '08 #1
8 2307
The Natural Philosopher wrote:
I have a databse containing amongst other things many images stored as
BLOBS.

When listing, currently I download all the images full size and let he
browser do the reduction to thumbnails.

It's getting a little slow on long lists.

Is there anyway to take the data and scale it down on the fly to a
smaller image? I have plenty of processor power, just not much bandwidth.
The images are a mixture of GIF, JPEG and PNG.

imagecreatefromstring() is your friend. Then just resize to your liking
and output as normal.

--
Norman
Registered Linux user #461062
Feb 16 '08 #2
Norman Peelman wrote:
The Natural Philosopher wrote:
>I have a databse containing amongst other things many images stored as
BLOBS.

When listing, currently I download all the images full size and let he
browser do the reduction to thumbnails.

It's getting a little slow on long lists.

Is there anyway to take the data and scale it down on the fly to a
smaller image? I have plenty of processor power, just not much bandwidth.
The images are a mixture of GIF, JPEG and PNG.


imagecreatefromstring() is your friend. Then just resize to your liking
and output as normal.
Looks good.Any special libraries needed? having hell trying to install
imagemagick..

Feb 16 '08 #3
Norman Peelman wrote:
The Natural Philosopher wrote:
>I have a databse containing amongst other things many images stored as
BLOBS.

When listing, currently I download all the images full size and let he
browser do the reduction to thumbnails.

It's getting a little slow on long lists.

Is there anyway to take the data and scale it down on the fly to a
smaller image? I have plenty of processor power, just not much bandwidth.
The images are a mixture of GIF, JPEG and PNG.


imagecreatefromstring() is your friend. Then just resize to your liking
and output as normal.
Well MANY thanks..

After struggling to get Gdlib on one machine..it was magically on the
other..I didn't realise that php5-gd was an extra debian package

the final send-thumbnail.php is, with obvious inclides to access
databases etc, as follows.

It sends a 100PX wide picture of anything it understands in the
database: speed is about ten times greater than with the original mostly
480px wide images.

The actual code that calls the sub file is
<?
printf("<IMG src=\"send_thumbnail.php?id=%d\"
width=\"100px\">",$product_id);
?>
and send_thumbnail.php itself is..

<?php
$privilege_level=0; // only we an access anything..external users must
match,
include('shoplib.php'); // deals with privilege levels and database
opening..
// include('mimelib.php'); //Always use JPEG now!!
open_database(); // ready to check
$id=$_GET['id'];
$query="select picture from product where id='".$id."'";
//echo $query;
$result=mysql_query($query);
if(($result>0) && (($rows=mysql_numrows($result)) == 1)) //got some data
{
$content=mysql_result($result,0,'picture');
}
else die();
if ($name="") die();

// now to shrink the picture..
$im=imagecreatefromstring($content);
// get sizes
$width=imagesx($im);
$height=imagesy($im);
// our thumbnails are 100px wide..dont care about the height so scale as
width
$newheight=round(($height*100)/$width);
$newwidth=100;
$thumbnail=imagecreatetruecolor($newwidth,$newheig ht); // make empty new
wotsit.
imagecopyresampled($thumbnail,
$im,0,0,0,0,$newwidth,$newheight,$width,$height);
header("Content-Type: image/jpeg");
imagejpeg( $thumbnail,null,75);
?>
Feb 16 '08 #4
Michael Fesser wrote:
You should definitely add some caching to store the resized images on
disk
....why make them on the fly?
Weather blobs in the database or images on the file system,
the big photos are already there. Adding a few thumbnails won't break
the disk space bank. If you do make them on the fly, then you would
need caching.....but it seems likely you'd run out of ram before
disk space. So making them in advance is still a better solution,
I think. That's what I do (make any missing thumbs at night, from cron).
Feb 16 '08 #5
Victor Remose wrote:
Michael Fesser wrote:
>You should definitely add some caching to store the resized images on
disk

...why make them on the fly?
Weather blobs in the database or images on the file system,
the big photos are already there. Adding a few thumbnails won't break
the disk space bank. If you do make them on the fly, then you would
need caching.....but it seems likely you'd run out of ram before
disk space. So making them in advance is still a better solution,
I think. That's what I do (make any missing thumbs at night, from cron).

Well, if I had thought about it first, I would have made them on the fly
when uploaded and stuffed them in the database..as well..but suh is history.

It's a quick hack to solve a problem *well enough* for now...

Feb 16 '08 #6
FYI, phpThumb support a lot of different formats, caching, and some
other interesting features: http://phpthumb.sourceforge.net/

On Feb 16, 6:28 am, The Natural Philosopher <a...@b.cwrote:
I have a databse containing amongst other things many images stored as
BLOBS.

When listing, currently I download all the images full size and let he
browser do the reduction to thumbnails.

It's getting a little slow on long lists.

Is there anyway to take the data and scale it down on the fly to a
smaller image? I have plenty of processor power, just not much bandwidth.

The images are a mixture of GIF, JPEG and PNG.
Feb 17 '08 #7
The Natural Philosopher wrote:
Well, if I had thought about it first, I would have made them on the fly
when uploaded and stuffed them in the database..as well..but suh is
history.
Well, why not (now) create a new column in your database, and then write a
quick script to run through the database and create all the thumbnails for
records "WHERE thumbnail IS NULL"? Then run that every night?

--
Toby A Inkster BSc (Hons) ARCS
[Geek of HTML/SQL/Perl/PHP/Python/Apache/Linux]
[OS: Linux 2.6.17.14-mm-desktop-9mdvsmp, up 20 days, 18:15.]

Bottled Water
http://tobyinkster.co.uk/blog/2008/02/18/bottled-water/
Feb 19 '08 #8
Greetings, The Natural Philosopher.
In reply to Your message dated Sunday, February 17, 2008, 00:35:01,
>>You should definitely add some caching to store the resized images on
disk

...why make them on the fly?
Weather blobs in the database or images on the file system,
the big photos are already there. Adding a few thumbnails won't break
the disk space bank. If you do make them on the fly, then you would
need caching.....but it seems likely you'd run out of ram before
disk space. So making them in advance is still a better solution,
I think. That's what I do (make any missing thumbs at night, from cron).

Well, if I had thought about it first, I would have made them on the fly
when uploaded and stuffed them in the database..as well..but suh is history.
It's a quick hack to solve a problem *well enough* for now...
I typically do nothing on the upload, except what is REALLY need to ensure
upload process are done right. Just if I RE-upload image, I go ahead and
delete corresponding thumbnail.
Creating thumbnails, storing them in cache, and display them from cache...
That's separate thing and it's done in a separate file.
So every time image or thumbnail accessed, it being sent to client from disk
only, using plain readfile().

Here is a code sample:

function imagePreview($name)
{
$fname = filesFilter($name);
if(false === $fname)
{
echo '<html><body><h3>404 No file &quot;'.htmlspecialchars($name).'&quot;</h3></body></html>';
}
else
{
if(!file_exists(GALLERY_BASE_DIR."/.preview/{$fname}"))
{
if(!file_exists(GALLERY_BASE_DIR.'/.preview'))
{
mkdir(GALLERY_BASE_DIR.'/.preview');
}

$img = imagecreatefromjpeg(GALLERY_BASE_DIR."/{$fname}");
$sx = imagesx($img);
$sy = imagesy($img);
$dx = GALLERY_PREVIEW_X;
$dy = GALLERY_PREVIEW_Y;
if(($sx $dx) || ($sy $dy))
{
if($sx $sy)
$dy = $dx * $sy / $sx;
else
$dx = $dy * $sx / $sy;
}

imagecopyresampled($img2 = imagecreatetruecolor($dx, $dy), $img,
0, 0, 0, 0,
$dx, $dy, $sx, $sy);
imagejpeg($img2, GALLERY_BASE_DIR."/.preview/{$fname}", 90);
}
header('Content-type: image/jpeg');
readfile(GALLERY_BASE_DIR."/.preview/{$fname}");
}
}

GALLERY_BASE_DIR typically protected and/or restricted to only .php files
being accessible.
--
Sincerely Yours, AnrDaemon <an*******@freemail.ru>

Feb 19 '08 #9

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

4
by: Gregory | last post by:
Hello, I've managed to build two web pages, one that can display images with associated text data in a table, and one that can resize and display images without the text. I'd like to resize the...
2
by: Johan | last post by:
Hi, Where to find a php script to upload jpg files and make thumbnails of the jpg files ? Johan
6
by: shank | last post by:
Is it possible to create thumbnails on-the-fly in ASP? I'm aware of ASPImage, but that appears to create actual files. I want to know if I can make 300 x 300 pixel artwork, and have ASP generate...
1
by: Espen Evje | last post by:
Hi, I am trying to present the images in a folder as thumbnails in a dynamically created asp:table. I however do not want to save the thumbnails to disk, only show the images in this folder as...
3
by: Chris D | last post by:
I'm doing some work with submitting graphics via ASP.net page to SQL 2000 server using VB. I know how to get a graphic into the database from a filefield control. I also know how to pull it out...
8
by: Fabricio Sperandio | last post by:
Hi everyone, I am trying to generate some thumbnails using System.Drawing.Image Class. Actually the GetThumnailImage method. The question is: How can I get a better thumbnail picture? I mean,...
6
by: Rich | last post by:
Hello, I want to simulate the dynamic thumbnail display of Windows Explorer (winxp) on a form or pannel container. If I place a picture box on my container form/pannel and dimension it to the...
5
by: JJ | last post by:
I have a gallery-like application. (The gallery will be actually presented in Flash, but the management (cms) of the images will be in asp.net. ) My question is, is it ok to create Thumbnail...
2
by: GK | last post by:
Hi all, I wish to know , how i can create thumbnails automatically using javascripts. It should reduce the size as well as pixel resolution (ie, a 1 mb image of 1280 x 800 px can be reduced to...
0
by: ryjfgjl | last post by:
ExcelToDatabase: batch import excel into database automatically...
0
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
0
by: jfyes | last post by:
As a hardware engineer, after seeing that CEIWEI recently released a new tool for Modbus RTU Over TCP/UDP filtering and monitoring, I actively went to its official website to take a look. It turned...
0
by: ArrayDB | last post by:
The error message I've encountered is; ERROR:root:Error generating model response: exception: access violation writing 0x0000000000005140, which seems to be indicative of an access violation...
1
by: PapaRatzi | last post by:
Hello, I am teaching myself MS Access forms design and Visual Basic. I've created a table to capture a list of Top 30 singles and forms to capture new entries. The final step is a form (unbound)...
0
by: Defcon1945 | last post by:
I'm trying to learn Python using Pycharm but import shutil doesn't work
0
by: af34tf | last post by:
Hi Guys, I have a domain whose name is BytesLimited.com, and I want to sell it. Does anyone know about platforms that allow me to list my domain in auction for free. Thank you
0
by: Faith0G | last post by:
I am starting a new it consulting business and it's been a while since I setup a new website. Is wordpress still the best web based software for hosting a 5 page website? The webpages will be...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 3 Apr 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome former...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.