[PHP] Saving A Database Image to a File (Thumbnail Problems)

2001-11-29 Thread Mike Gifford

Hello All,

I'd really appreciate some help figuring out what's wrong with this 
code.  I can't seem to successfully save a MySQL JPG Image to a physical 
jpg file (well atleast not a valid one)

The critical pieces of the code look like this:

  // 1. Get Image from DB to String
  $sql = SELECT Image FROM Images WHERE ID='$ID';
  $res = dbi_query ( $sql );
  if ( $res ) {
   if($row = dbi_fetch_row( $res ))
   dbi_free_result ( $res );
   $Images = stripslashes($row[0]);
  }

  $File = ReThumbnail.jpg;

  // 2. Write string to File
  $fd = fopen($File, wb);
  fputs($fd,$Images,strlen($Images));
  fclose($fd);

  // 3. Create Thumbnail
  system(djpeg -pnm $File | pnmscale -xscale $xscale -yscale $yscale | 
  cjpeg  $File.tmb);

  // 4. Read New Thumbnail into a new string
  $fd = fopen( $File.tmb, rb);
  $tmb = addslashes(fread($fd,filesize($File.tmb)));
  fclose($fd);

  // 5. Update Database
  $sql = UPDATE Images SET Thumbnail='$tmb' WHERE ID=$ID;
  if(dbi_query($sql)) {
   echo ReThumbnailing Successful;
   exit;
  }

The problem seems to be in step 2 from what I can figure.

I know that the Image file in the database is valid and outputs the 
appropriate info to display the jpg..  However, the image that is saved 
to the hard drive doesn't seem to be valid.

Nor can I run the system command from the command line on the server:

[mike@madras caravan2001]$ djpeg -pnm ReThumbnail.jpg | pnmscale -xscale 
.1 -yscale .1 | cjpeg  ReThumbnail.jpg.tmb
Corrupt JPEG data: 67 extraneous bytes before marker 0xc2
Quantization table 0x01 was not defined
pnmscale: Command not found.
Empty input file

I'm not sure what those extra 67 bytes are about..  Is the Oxc2 marker 
the beginning or the end?  I couldn't figure this out either..

However, if step 2 isn't working, It's bungling up everything else...

I thought that this might be an issue of strlen balking over the binary 
file.  The documentation doesn't seem to think this would be a problem 
(with binary files)

 http://www.php.net/manual/en/function.strlen.php

I found an alternate resource here

 http://www.php.net/manual/en/function.mysql-field-len.php

and attempted to incorporate it with

 // Alternate way to determine strlen
 $result = mysql_query($sql);
 $ImageSize = mysql_field_len ($result, 0);
 // $ImageSize = strlen($Images);
 echo $ImageSize;


That didn't work either..  However I wqas able to get some more useful 
information about the validity of strlen


DB Result

-rwxrwxrwx1 mike www 17159 Nov 29 23:27 ReThumbnail.jpg
-rwxrwxrwx1 mike www 0 Nov 29 23:27 ReThumbnail.jpg.tmb

16777215
Temp Thumb File: ReThumbnail.jpg.tmb
Thumbnail:
ReThumbnailing Successful

[mike@madras caravan2001]$ djpeg -pnm ReThumbnail.jpg | pnmscale -xscale 
.1 -yscale .1 | cjpeg  ReThumbnail.jpg.tmb
Corrupt JPEG data: 67 extraneous bytes before marker 0xc2
Quantization table 0x01 was not defined
pnmscale: Command not found.
Empty input file



strlen Result

-rwxrwxrwx1 mike www 17159 Nov 29 23:24 ReThumbnail.jpg
-rwxrwxrwx1 mike www 0 Nov 29 23:24 ReThumbnail.jpg.tmb

17159
Temp Thumb File: ReThumbnail.jpg.tmb
Thumbnail:
ReThumbnailing Successful

[mike@madras caravan2001]$ djpeg -pnm ReThumbnail.jpg | pnmscale -xscale 
.1 -yscale .1 | cjpeg  ReThumbnail.jpg.tmb
Corrupt JPEG data: 67 extraneous bytes before marker 0xc2
Quantization table 0x01 was not defined
pnmscale: Command not found.
Empty input file


Any suggestions would be appreciated..

Really, all I'm trying to do is take a MySQL jpg image and shring it 10% 
and then save it again as another MySQL Image (a thumbnail)...

Mike
-- 
Mike Gifford, OpenConcept Consulting, http://www.openconcept.ca
Offering everything your organization needs for an effective web site.
New PHP/MySQL Photogallery  Great Pictures http://genevilleneuve.com
In all things it is better to hope than to despair.Wolfgang von Goethe


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]




RE: [PHP] Saving A Database Image to a File (Thumbnail Problems)

2001-11-29 Thread Martin Towell

try changing this line
  fputs($fd,$Images,strlen($Images));
to
  fputs($fd,$Images);
as you don't need to specify the length. If you don't specify the length,
it'll write the entire string. see how that goes...

-Original Message-
From: Mike Gifford [mailto:[EMAIL PROTECTED]]
Sent: Friday, November 30, 2001 3:47 PM
To: [EMAIL PROTECTED]
Subject: [PHP] Saving A Database Image to a File (Thumbnail Problems)


Hello All,

I'd really appreciate some help figuring out what's wrong with this 
code.  I can't seem to successfully save a MySQL JPG Image to a physical 
jpg file (well atleast not a valid one)

The critical pieces of the code look like this:

  // 1. Get Image from DB to String
  $sql = SELECT Image FROM Images WHERE ID='$ID';
  $res = dbi_query ( $sql );
  if ( $res ) {
   if($row = dbi_fetch_row( $res ))
   dbi_free_result ( $res );
   $Images = stripslashes($row[0]);
  }

  $File = ReThumbnail.jpg;

  // 2. Write string to File
  $fd = fopen($File, wb);
  fputs($fd,$Images,strlen($Images));
  fclose($fd);

  // 3. Create Thumbnail
  system(djpeg -pnm $File | pnmscale -xscale $xscale -yscale $yscale | 
  cjpeg  $File.tmb);

  // 4. Read New Thumbnail into a new string
  $fd = fopen( $File.tmb, rb);
  $tmb = addslashes(fread($fd,filesize($File.tmb)));
  fclose($fd);

  // 5. Update Database
  $sql = UPDATE Images SET Thumbnail='$tmb' WHERE ID=$ID;
  if(dbi_query($sql)) {
   echo ReThumbnailing Successful;
   exit;
  }

The problem seems to be in step 2 from what I can figure.

I know that the Image file in the database is valid and outputs the 
appropriate info to display the jpg..  However, the image that is saved 
to the hard drive doesn't seem to be valid.

Nor can I run the system command from the command line on the server:

[mike@madras caravan2001]$ djpeg -pnm ReThumbnail.jpg | pnmscale -xscale 
.1 -yscale .1 | cjpeg  ReThumbnail.jpg.tmb
Corrupt JPEG data: 67 extraneous bytes before marker 0xc2
Quantization table 0x01 was not defined
pnmscale: Command not found.
Empty input file

I'm not sure what those extra 67 bytes are about..  Is the Oxc2 marker 
the beginning or the end?  I couldn't figure this out either..

However, if step 2 isn't working, It's bungling up everything else...

I thought that this might be an issue of strlen balking over the binary 
file.  The documentation doesn't seem to think this would be a problem 
(with binary files)

 http://www.php.net/manual/en/function.strlen.php

I found an alternate resource here

 http://www.php.net/manual/en/function.mysql-field-len.php

and attempted to incorporate it with

 // Alternate way to determine strlen
 $result = mysql_query($sql);
 $ImageSize = mysql_field_len ($result, 0);
 // $ImageSize = strlen($Images);
 echo $ImageSize;


That didn't work either..  However I wqas able to get some more useful 
information about the validity of strlen


DB Result

-rwxrwxrwx1 mike www 17159 Nov 29 23:27 ReThumbnail.jpg
-rwxrwxrwx1 mike www 0 Nov 29 23:27 ReThumbnail.jpg.tmb

16777215
Temp Thumb File: ReThumbnail.jpg.tmb
Thumbnail:
ReThumbnailing Successful

[mike@madras caravan2001]$ djpeg -pnm ReThumbnail.jpg | pnmscale -xscale 
.1 -yscale .1 | cjpeg  ReThumbnail.jpg.tmb
Corrupt JPEG data: 67 extraneous bytes before marker 0xc2
Quantization table 0x01 was not defined
pnmscale: Command not found.
Empty input file



strlen Result

-rwxrwxrwx1 mike www 17159 Nov 29 23:24 ReThumbnail.jpg
-rwxrwxrwx1 mike www 0 Nov 29 23:24 ReThumbnail.jpg.tmb

17159
Temp Thumb File: ReThumbnail.jpg.tmb
Thumbnail:
ReThumbnailing Successful

[mike@madras caravan2001]$ djpeg -pnm ReThumbnail.jpg | pnmscale -xscale 
.1 -yscale .1 | cjpeg  ReThumbnail.jpg.tmb
Corrupt JPEG data: 67 extraneous bytes before marker 0xc2
Quantization table 0x01 was not defined
pnmscale: Command not found.
Empty input file


Any suggestions would be appreciated..

Really, all I'm trying to do is take a MySQL jpg image and shring it 10% 
and then save it again as another MySQL Image (a thumbnail)...

Mike
-- 
Mike Gifford, OpenConcept Consulting, http://www.openconcept.ca
Offering everything your organization needs for an effective web site.
New PHP/MySQL Photogallery  Great Pictures http://genevilleneuve.com
In all things it is better to hope than to despair.Wolfgang von Goethe


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]



Re: [PHP] Saving A Database Image to a File (Thumbnail Problems)

2001-11-29 Thread Mike Gifford

Hi Martin,

I read somewhere else that this was required for binary files..  However 
it certainly doesn't seem to be..

As it turns out, when I took out the stripslashes($row[0]) from:

// 1. Get Image from DB to String
$sql = SELECT Image FROM Images WHERE ID='$ID';
$res = dbi_query ( $sql );
if ( $res ) {
 if($row = dbi_fetch_row( $res ))
 dbi_free_result ( $res );
 $Images = $row[0];
}

It mostly worked..

However I ran into another problem..  I think this is a difference 
between RedHat 6.x and 7.x..

pnmscale doesn't seem to exist in the 7.x release.

I ended up using the following instead:
system(djpeg -pnm -scale 1/8 $File | cjpeg  $File.tmb);

In anycase thanks for your help.

Mike

Martin Towell wrote:

 try changing this line
   fputs($fd,$Images,strlen($Images));
 to
   fputs($fd,$Images);
 as you don't need to specify the length. If you don't specify the 
 length, it'll write the entire string. see how that goes...
 
 -Original Message-
 From: Mike Gifford [mailto:[EMAIL PROTECTED]]
 Sent: Friday, November 30, 2001 3:47 PM
 To: [EMAIL PROTECTED]
 Subject: [PHP] Saving A Database Image to a File (Thumbnail Problems)
 
 
 Hello All,
 
 I'd really appreciate some help figuring out what's wrong with this
 code.  I can't seem to successfully save a MySQL JPG Image to a physical
 jpg file (well atleast not a valid one)
 
 The critical pieces of the code look like this:
 
   // 1. Get Image from DB to String
   $sql = SELECT Image FROM Images WHERE ID='$ID';
   $res = dbi_query ( $sql );
   if ( $res ) {
if($row = dbi_fetch_row( $res ))
dbi_free_result ( $res );
$Images = stripslashes($row[0]);
   }
 
   $File = ReThumbnail.jpg;
 
   // 2. Write string to File
   $fd = fopen($File, wb);
   fputs($fd,$Images,strlen($Images));
   fclose($fd);
 
   // 3. Create Thumbnail
   system(djpeg -pnm $File | pnmscale -xscale $xscale -yscale $yscale |
   cjpeg  $File.tmb);
 
   // 4. Read New Thumbnail into a new string
   $fd = fopen( $File.tmb, rb);
   $tmb = addslashes(fread($fd,filesize($File.tmb)));
   fclose($fd);
 
   // 5. Update Database
   $sql = UPDATE Images SET Thumbnail='$tmb' WHERE ID=$ID;
   if(dbi_query($sql)) {
echo ReThumbnailing Successful;
exit;
   }
 
 The problem seems to be in step 2 from what I can figure.
 
 I know that the Image file in the database is valid and outputs the
 appropriate info to display the jpg..  However, the image that is saved
 to the hard drive doesn't seem to be valid.
 
 Nor can I run the system command from the command line on the server:
 
 [mike@madras caravan2001]$ djpeg -pnm ReThumbnail.jpg | pnmscale -xscale
 .1 -yscale .1 | cjpeg  ReThumbnail.jpg.tmb
 Corrupt JPEG data: 67 extraneous bytes before marker 0xc2
 Quantization table 0x01 was not defined
 pnmscale: Command not found.
 Empty input file
 
 I'm not sure what those extra 67 bytes are about..  Is the Oxc2 marker
 the beginning or the end?  I couldn't figure this out either..
 
 However, if step 2 isn't working, It's bungling up everything else...
 
 I thought that this might be an issue of strlen balking over the binary
 file.  The documentation doesn't seem to think this would be a problem
 (with binary files)
 
  http://www.php.net/manual/en/function.strlen.php
 
 I found an alternate resource here
 
  http://www.php.net/manual/en/function.mysql-field-len.php
 
 and attempted to incorporate it with
 
  // Alternate way to determine strlen
  $result = mysql_query($sql);
  $ImageSize = mysql_field_len ($result, 0);
  // $ImageSize = strlen($Images);
  echo $ImageSize;
 
 
 That didn't work either..  However I wqas able to get some more useful
 information about the validity of strlen
 
 
 DB Result
 
 -rwxrwxrwx1 mike www 17159 Nov 29 23:27 ReThumbnail.jpg
 -rwxrwxrwx1 mike www 0 Nov 29 23:27 ReThumbnail.jpg.tmb
 
 16777215
 Temp Thumb File: ReThumbnail.jpg.tmb
 Thumbnail:
 ReThumbnailing Successful
 
 [mike@madras caravan2001]$ djpeg -pnm ReThumbnail.jpg | pnmscale -xscale
 .1 -yscale .1 | cjpeg  ReThumbnail.jpg.tmb
 Corrupt JPEG data: 67 extraneous bytes before marker 0xc2
 Quantization table 0x01 was not defined
 pnmscale: Command not found.
 Empty input file
 
 
 
 strlen Result
 
 -rwxrwxrwx1 mike www 17159 Nov 29 23:24 ReThumbnail.jpg
 -rwxrwxrwx1 mike www 0 Nov 29 23:24 ReThumbnail.jpg.tmb
 
 17159
 Temp Thumb File: ReThumbnail.jpg.tmb
 Thumbnail:
 ReThumbnailing Successful
 
 [mike@madras caravan2001]$ djpeg -pnm ReThumbnail.jpg | pnmscale -xscale
 .1 -yscale .1 | cjpeg  ReThumbnail.jpg.tmb
 Corrupt JPEG data: 67 extraneous bytes before marker 0xc2
 Quantization table 0x01 was not defined
 pnmscale: Command not found.
 Empty input file
 
 
 Any suggestions would be appreciated..
 
 Really, all I'm trying to do is take a MySQL jpg image and shring it 10%
 and then save it again as another MySQL Image (a thumbnail)...
 
 Mike
 -- 
 Mike