andyftw/image-faker
andyftw/image-faker adds an image provider to Faker, letting you generate fake image URLs or placeholders for tests and seeders. Useful for populating avatar, thumbnail, and gallery fields with realistic-looking image data during development.
Installation:
composer require andyftw/image-faker
Add the provider to config/app.php under providers:
Andyftw\ImageFaker\ImageFakerServiceProvider::class,
Basic Usage:
Register the provider in Faker initialization (e.g., in a test setup or AppServiceProvider):
$faker = Faker\Factory::create();
$faker->addProvider(new Andyftw\ImageFaker\ImageFakerProvider($faker));
First Use Case: Generate a fake image URL or data:
$imageUrl = $faker->imageUrl(); // e.g., "https://loremflickr.com/640/480"
$imageData = $faker->image(); // Binary image data (if supported)
Testing with Fake Images:
Use imageUrl() in unit/integration tests to mock image assets:
public function test_user_profile_image()
{
$user = User::factory()->create(['avatar' => $this->faker->imageUrl()]);
$this->assertStringStartsWith('http', $user->avatar);
}
Seeding Databases:
Populate image fields in factories:
use Andyftw\ImageFaker\ImageFakerProvider;
$factory->define(User::class, function (Faker $faker) {
return [
'profile_picture' => $faker->imageUrl(640, 480, null, true),
];
});
Dynamic Image Generation: Combine with other Faker providers for dynamic filenames:
$filename = $faker->imageUrl(300, 200, null, false, 'png');
$customPath = "uploads/{$faker->uuid}.{$faker->randomElement(['jpg', 'png'])}";
Laravel Filesystem: Save fake images to storage:
$imageData = file_get_contents($faker->imageUrl(800, 600, null, false, 'jpg'));
Storage::disk('public')->put("fake/{$faker->uuid}.jpg", $imageData);
API Responses:
Use imageUrl() for mock API responses in Postman/Newman tests:
$response = $this->getJson('/api/user', [
'avatar' => $this->faker->imageUrl(200, 200),
]);
Blade Templates: Generate placeholder images in views:
<img src="{{ $faker->imageUrl(100, 100) }}" alt="Placeholder">
Deprecated Provider: The package hasn’t been updated since 2016. Verify compatibility with your Faker version (v1.9+ recommended).
Faker\Provider\Base changes).Binary Data Limitations:
image() may return raw binary data, which isn’t always useful. Prefer imageUrl() for most cases.
No Local File Generation:
The package generates URLs (e.g., via LoremFlickr) but doesn’t save files locally. Use Storage facade to handle this.
Invalid URLs:
If imageUrl() returns malformed links, check:
null seed or invalid dimensions).Faker Provider Registration: Ensure the provider is added after Faker is instantiated:
// ❌ Wrong (provider not registered)
$faker = new Faker\Generator();
// ✅ Correct
$faker = Faker\Factory::create();
$faker->addProvider(new ImageFakerProvider($faker));
Custom Image Providers: Extend the package by creating a wrapper for other services (e.g., Placeimg):
class PlaceimgProvider extends \Faker\Provider\Base {
public function placeimg($width, $height, $seed = null) {
return "https://placeimg.com/{$width}/{$height}/any";
}
}
Local Image Storage:
Combine with Intervention\Image to generate and save images:
$img = Image::make($faker->image());
$img->save(storage_path("app/fake_{$faker->uuid}.jpg"));
Configuration: Override default LoremFlickr settings via environment variables or a config file:
config([
'image-faker' => [
'base_url' => env('IMAGE_FAKER_URL', 'https://loremflickr.com'),
],
]);
Consistent Seeds: Use a fixed seed for reproducible tests:
$faker = Faker\Factory::create(['seed' => 1234]);
$faker->addProvider(new ImageFakerProvider($faker));
$url = $faker->imageUrl(); // Always returns the same URL
Performance: Cache generated URLs in tests to avoid repeated HTTP calls:
static::ensureCached(function () {
return $this->faker->imageUrl();
});
How can I help you explore Laravel packages today?