473,387 Members | 3,781 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,387 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 2318
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: taylorcarr | last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
0
by: aa123db | last post by:
Variable and constants Use var or let for variables and const fror constants. Var foo ='bar'; Let foo ='bar';const baz ='bar'; Functions function $name$ ($parameters$) { } ...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...

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.