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
>
> -rwxrwxrwx 1 mike www 17159 Nov 29 23:27 ReThumbnail.jpg
> -rwxrwxrwx 1 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
>
> -rwxrwxrwx 1 mike www 17159 Nov 29 23:24 ReThumbnail.jpg
> -rwxrwxrwx 1 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]
>
--
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]