/** * Generates thumbnails. */ public function generateThumbnails() { if (empty($this->objects)) { $this->readObjects(); } foreach ($this->objects as $attachment) { if (!$attachment->isImage) { // create thumbnails for every file that isn't an image $this->eventAttachment = $attachment; $this->eventData = array(); EventHandler::getInstance()->fireAction($this, 'generateThumbnail'); if (!empty($this->eventData)) { $attachment->update($this->eventData); } continue; } if ($attachment->width <= 144 && $attachment->height < 144) { continue; // image smaller than thumbnail size; skip } $adapter = ImageHandler::getInstance()->getAdapter(); // check memory limit $neededMemory = $attachment->width * $attachment->height * ($attachment->fileType == 'image/png' ? 4 : 3) * 2.1; if (FileUtil::getMemoryLimit() != -1 && FileUtil::getMemoryLimit() < memory_get_usage() + $neededMemory) { continue; } $adapter->loadFile($attachment->getLocation()); $updateData = array(); // remove / reset old thumbnails if ($attachment->tinyThumbnailType) { @unlink($attachment->getTinyThumbnailLocation()); $updateData['tinyThumbnailType'] = ''; $updateData['tinyThumbnailSize'] = 0; $updateData['tinyThumbnailWidth'] = 0; $updateData['tinyThumbnailHeight'] = 0; } if ($attachment->thumbnailType) { @unlink($attachment->getThumbnailLocation()); $updateData['thumbnailType'] = ''; $updateData['thumbnailSize'] = 0; $updateData['thumbnailWidth'] = 0; $updateData['thumbnailHeight'] = 0; } // create tiny thumbnail $tinyThumbnailLocation = $attachment->getTinyThumbnailLocation(); $thumbnail = $adapter->createThumbnail(144, 144, false); $adapter->writeImage($thumbnail, $tinyThumbnailLocation); if (file_exists($tinyThumbnailLocation) && ($imageData = @getImageSize($tinyThumbnailLocation)) !== false) { $updateData['tinyThumbnailType'] = $imageData['mime']; $updateData['tinyThumbnailSize'] = @filesize($tinyThumbnailLocation); $updateData['tinyThumbnailWidth'] = $imageData[0]; $updateData['tinyThumbnailHeight'] = $imageData[1]; } // create standard thumbnail if ($attachment->width > ATTACHMENT_THUMBNAIL_WIDTH || $attachment->height > ATTACHMENT_THUMBNAIL_HEIGHT) { $thumbnailLocation = $attachment->getThumbnailLocation(); $thumbnail = $adapter->createThumbnail(ATTACHMENT_THUMBNAIL_WIDTH, ATTACHMENT_THUMBNAIL_HEIGHT, ATTACHMENT_RETAIN_DIMENSIONS); $adapter->writeImage($thumbnail, $thumbnailLocation); if (file_exists($thumbnailLocation) && ($imageData = @getImageSize($thumbnailLocation)) !== false) { $updateData['thumbnailType'] = $imageData['mime']; $updateData['thumbnailSize'] = @filesize($thumbnailLocation); $updateData['thumbnailWidth'] = $imageData[0]; $updateData['thumbnailHeight'] = $imageData[1]; } } if (!empty($updateData)) { $attachment->update($updateData); } } }