{"id":19090142,"url":"https://github.com/aportela/remote-thumbnail-cache-wrapper","last_synced_at":"2025-11-11T17:32:16.579Z","repository":{"id":60801966,"uuid":"485144448","full_name":"aportela/remote-thumbnail-cache-wrapper","owner":"aportela","description":"generate \u0026 cache thumbnails of remote \u0026 local images","archived":false,"fork":false,"pushed_at":"2024-01-03T08:32:24.000Z","size":76,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-02T22:18:39.230Z","etag":null,"topics":["composer-package","gd","jpg","php","php8","png","thumbnail"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aportela.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-04-24T21:28:06.000Z","updated_at":"2023-08-07T13:30:43.000Z","dependencies_parsed_at":"2024-11-09T03:02:34.044Z","dependency_job_id":"f151a4a2-ecd6-470f-a1c1-e32ea4b446b2","html_url":"https://github.com/aportela/remote-thumbnail-cache-wrapper","commit_stats":{"total_commits":12,"total_committers":1,"mean_commits":12.0,"dds":0.0,"last_synced_commit":"994fed3a5a3ba873b110c6372bc2027d20cb6ab3"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aportela%2Fremote-thumbnail-cache-wrapper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aportela%2Fremote-thumbnail-cache-wrapper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aportela%2Fremote-thumbnail-cache-wrapper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aportela%2Fremote-thumbnail-cache-wrapper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aportela","download_url":"https://codeload.github.com/aportela/remote-thumbnail-cache-wrapper/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240136997,"owners_count":19753650,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["composer-package","gd","jpg","php","php8","png","thumbnail"],"created_at":"2024-11-09T03:02:14.823Z","updated_at":"2025-11-11T17:32:16.575Z","avatar_url":"https://github.com/aportela.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# remote-thumbnail-cache-wrapper\n\ngenerate \u0026 cache thumbnails of remote \u0026 local images\n\n## Requirements\n\n- mininum php version 8.4\n- curl extension must be enabled\n- gd extension must be enabled\n\n## Limitations\n\nAt this time only JPEG \u0026 PNG formats are supported.\n\n## Install (composer) dependencies:\n\n```Shell\ncomposer require aportela/remote-thumbnail-cache-wrapper\n```\n\n## Code example (from remote picture):\n\n```php\n\u003c?php\n\n    require \"vendor/autoload.php\";\n\n    $logger = new \\Psr\\Log\\NullLogger(\"\");\n\n    $cachePath = dirname(__FILE__) . DIRECTORY_SEPARATOR . \"cache\";\n\n    $url = \"https://raw.githubusercontent.com/aportela/remote-thumbnail-cache-wrapper/refs/heads/main/src/Test/200.jpg\";\n    $source = new \\aportela\\RemoteThumbnailCacheWrapper\\Source\\URLSource($url);\n\n    //$ttl = null; // cache never expires\n    //$ttl = 60; // cache expires after 60 seconds\n    $ttl = new \\DateInterval(\"PT60M\"); // cache expires after 60 minutes\n\n    // JPEG, quality: 80, resolution: 320x200, cache expires after 60 minutes\n    $thumbnail = new \\aportela\\RemoteThumbnailCacheWrapper\\JPEGThumbnail($logger, $cachePath, $source, 80, 320, 200, $ttl);\n    // get thumbnail local path (from cache || create cache if not found)\n    $path = $thumbnail-\u003eget();\n    if ($path !== false) {\n        header(\"Content-Type: image/jpeg\");\n        readfile($path);\n    } else {\n        header(\"HTTP/1.1 404 Not Found\");\n    }\n```\n\n# Code example (from local filesystem picture):\n\n```php\n\u003c?php\n\n    require \"vendor/autoload.php\";\n\n    $logger = new \\Psr\\Log\\NullLogger(\"\");\n\n    $cachePath = dirname(__FILE__) . DIRECTORY_SEPARATOR . \"cache\";\n\n    $localImagePath = \"/tmp/existent_image.jpg\";\n    $source = new \\aportela\\RemoteThumbnailCacheWrapper\\Source\\LocalFilenameResource($localImagePath);\n\n    $ttl = null; // cache never expires\n    //$ttl = 60; // cache expires after 60 seconds\n    //$ttl = new \\DateInterval(\"PT60M\"); // cache expires after 60 minutes\n\n    // PNG, quality: 90, resolution: 160x100, cache never expires\n    $thumbnail = new \\aportela\\RemoteThumbnailCacheWrapper\\PNGThumbnail($logger, $cachePath, $source, 80, 160, 100, $ttl);\n    // get thumbnail local path (from cache || create cache if not found)\n    $path = $thumbnail-\u003eget();\n    if ($path !== false) {\n        header(\"Content-Type: image/png\");\n        readfile($path);\n    } else {\n        header(\"HTTP/1.1 404 Not Found\");\n    }\n```\n\n![PHP Composer](https://github.com/aportela/remote-thumbnail-cache-wrapper/actions/workflows/php.yml/badge.svg)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faportela%2Fremote-thumbnail-cache-wrapper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faportela%2Fremote-thumbnail-cache-wrapper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faportela%2Fremote-thumbnail-cache-wrapper/lists"}