LiipImagineBundle图片过滤后不出现
LiipImagineBundle Picture does not appear after filtering
我正在使用 VichUploadBundle 将图像上传到我的数据库中,并希望使用 LiipImage[ 将图像的缩略图显示在网站上=55=].
这是我的 config.yml 文件设置
//.....
vich_uploader:
db_driver: orm
twig: true
mappings:
product_image:
uri_prefix: /images/products
upload_destination: '%kernel.root_dir%/../web/images/products'
inject_on_load: false
delete_on_update: true
delete_on_remove: true
liip_imagine:
# configure resolvers
resolvers:
# setup the default resolver
default:
# use the default web path
web_path: ~
# your filter sets are defined here
filter_sets:
# use the default cache configuration
cache: ~
# the name of the "filter set"
my_thumb:
# adjust the image quality to 75%
quality: 75
# list of transformations to apply (the "filters")
filters:
# create a thumbnail: set size to 120x90 and use the "outbound" mode
# to crop the image when the size ratio of the input differs
thumbnail: { size: [120, 90], mode: outbound }
# create a 2px black border: center the thumbnail on a black background
# 4px larger to create a 2px border around the final image
background: { size: [124, 98], position: center, color: '#000000' }
liip 的大部分代码都是直接从文档中复制来进行测试的。
这是我的routing.yml
app:
resource: "@AppBundle/Controller/"
type: annotation
_liip_imagine:
resource: "@LiipImagineBundle/Resources/config/routing.xml
我终于有了要上传的图像实体。
它也是从官方 Vich 文档中复制的代码
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\HttpFoundation\File\File;
use Vich\UploaderBundle\Mapping\Annotation as Vich;
/**
* @ORM\Entity
* @Vich\Uploadable
*/
class Image
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
// ..... other fields
/**
* NOTE: This is not a mapped field of entity metadata, just a simple property.
*
* @Vich\UploadableField(mapping="product_image", fileNameProperty="imageName")
*
* @var File
*/
protected $imageFile;
/**
* @ORM\Column(type="string", length=255)
*
* @var string
*/
protected $imageName;
/**
* @ORM\Column(type="string", length=100)
*
* @var string
*/
protected $imageTitle = null;
/**
* @ORM\Column(type="string", length=100)
*
* @var string
*/
protected $imageAuthor = null;
/**
* If manually uploading a file (i.e. not using Symfony Form) ensure an instance
* of 'UploadedFile' is injected into this setter to trigger the update. If this
* bundle's configuration parameter 'inject_on_load' is set to 'true' this setter
* must be able to accept an instance of 'File' as the bundle will inject one here
* during Doctrine hydration.
*
* @param File|\Symfony\Component\HttpFoundation\File\UploadedFile $image
*
* @return Product
*/
public function setImageFile(File $image = null)
{
$this->imageFile = $image;
if ($image) {
// It is required that at least one field changes if you are using doctrine
// otherwise the event listeners won't be called and the file is lost
$this->updatedAt = new \DateTimeImmutable();
}
return $this;
}
/**
* @return File|null
*/
public function getImageFile()
{
return $this->imageFile;
}
/**
* @param string $imageName
*
* @return Product
*/
public function setImageName($imageName)
{
$this->imageName = $imageName;
return $this;
}
/**
* @return string|null
*/
public function getImageName()
{
return $this->imageName;
}
/**
* @ORM\Column(type="datetime")
*
* @var \DateTime
*/
protected $updatedAt;
/**
* @return null
*/
public function getImageTitle()
{
return $this->imageTitle;
}
/**
* @param null $imageTitle
*/
public function setImageTitle($imageTitle)
{
$this->imageTitle = $imageTitle;
}
/**
* @return null
*/
public function getImageAuthor()
{
return $this->imageAuthor;
}
/**
* @param null $imageAuthor
*/
public function setImageAuthor($imageAuthor)
{
$this->imageAuthor = $imageAuthor;
}
}
在我的 控制器 中,我将图像 table 放入包含 $em
的数组中
$em = $this->getDoctrine()->getManager();
$list = $em->getRepository(Image::class)->findAll();
我稍后将其放入视图中并(想要)像这样打印它们:
{% for l in list %}
<tr>
<td>
<img src="{{ asset('/images/products/'~l.imageName) | imagine_filter('my_thumb') }}" alt="{{ l.imageName }}">
</td>
<td>{{ l.imageTitle }}</td>
<td>{{ l.imageAuthor }}</td>
</tr>
{% endfor %}
不幸的是,输出如下所示:
现在路径没问题了。图像 在没有 imagine_filter()
的情况下效果很好。使用 Vich 资产时也会出现同样的效果。
检查图片链接路径时:
http://localhost:8000/media/cache/resolve/my_thumb/images/products/hqdefault.jpg
图片路径是
web/images/products
有谁知道可能是什么问题吗?
或者提供用于创建图像缩略图的替代包
所有的帮助都会很棒
FIXED:在 php.ini 中启用 GD 和 filenames 并重新启动 apache , 然后清除缓存修复一切
我正在使用 VichUploadBundle 将图像上传到我的数据库中,并希望使用 LiipImage[ 将图像的缩略图显示在网站上=55=].
这是我的 config.yml 文件设置
//.....
vich_uploader:
db_driver: orm
twig: true
mappings:
product_image:
uri_prefix: /images/products
upload_destination: '%kernel.root_dir%/../web/images/products'
inject_on_load: false
delete_on_update: true
delete_on_remove: true
liip_imagine:
# configure resolvers
resolvers:
# setup the default resolver
default:
# use the default web path
web_path: ~
# your filter sets are defined here
filter_sets:
# use the default cache configuration
cache: ~
# the name of the "filter set"
my_thumb:
# adjust the image quality to 75%
quality: 75
# list of transformations to apply (the "filters")
filters:
# create a thumbnail: set size to 120x90 and use the "outbound" mode
# to crop the image when the size ratio of the input differs
thumbnail: { size: [120, 90], mode: outbound }
# create a 2px black border: center the thumbnail on a black background
# 4px larger to create a 2px border around the final image
background: { size: [124, 98], position: center, color: '#000000' }
liip 的大部分代码都是直接从文档中复制来进行测试的。
这是我的routing.yml
app:
resource: "@AppBundle/Controller/"
type: annotation
_liip_imagine:
resource: "@LiipImagineBundle/Resources/config/routing.xml
我终于有了要上传的图像实体。 它也是从官方 Vich 文档中复制的代码
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\HttpFoundation\File\File;
use Vich\UploaderBundle\Mapping\Annotation as Vich;
/**
* @ORM\Entity
* @Vich\Uploadable
*/
class Image
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
// ..... other fields
/**
* NOTE: This is not a mapped field of entity metadata, just a simple property.
*
* @Vich\UploadableField(mapping="product_image", fileNameProperty="imageName")
*
* @var File
*/
protected $imageFile;
/**
* @ORM\Column(type="string", length=255)
*
* @var string
*/
protected $imageName;
/**
* @ORM\Column(type="string", length=100)
*
* @var string
*/
protected $imageTitle = null;
/**
* @ORM\Column(type="string", length=100)
*
* @var string
*/
protected $imageAuthor = null;
/**
* If manually uploading a file (i.e. not using Symfony Form) ensure an instance
* of 'UploadedFile' is injected into this setter to trigger the update. If this
* bundle's configuration parameter 'inject_on_load' is set to 'true' this setter
* must be able to accept an instance of 'File' as the bundle will inject one here
* during Doctrine hydration.
*
* @param File|\Symfony\Component\HttpFoundation\File\UploadedFile $image
*
* @return Product
*/
public function setImageFile(File $image = null)
{
$this->imageFile = $image;
if ($image) {
// It is required that at least one field changes if you are using doctrine
// otherwise the event listeners won't be called and the file is lost
$this->updatedAt = new \DateTimeImmutable();
}
return $this;
}
/**
* @return File|null
*/
public function getImageFile()
{
return $this->imageFile;
}
/**
* @param string $imageName
*
* @return Product
*/
public function setImageName($imageName)
{
$this->imageName = $imageName;
return $this;
}
/**
* @return string|null
*/
public function getImageName()
{
return $this->imageName;
}
/**
* @ORM\Column(type="datetime")
*
* @var \DateTime
*/
protected $updatedAt;
/**
* @return null
*/
public function getImageTitle()
{
return $this->imageTitle;
}
/**
* @param null $imageTitle
*/
public function setImageTitle($imageTitle)
{
$this->imageTitle = $imageTitle;
}
/**
* @return null
*/
public function getImageAuthor()
{
return $this->imageAuthor;
}
/**
* @param null $imageAuthor
*/
public function setImageAuthor($imageAuthor)
{
$this->imageAuthor = $imageAuthor;
}
}
在我的 控制器 中,我将图像 table 放入包含 $em
的数组中$em = $this->getDoctrine()->getManager();
$list = $em->getRepository(Image::class)->findAll();
我稍后将其放入视图中并(想要)像这样打印它们:
{% for l in list %}
<tr>
<td>
<img src="{{ asset('/images/products/'~l.imageName) | imagine_filter('my_thumb') }}" alt="{{ l.imageName }}">
</td>
<td>{{ l.imageTitle }}</td>
<td>{{ l.imageAuthor }}</td>
</tr>
{% endfor %}
不幸的是,输出如下所示:
现在路径没问题了。图像 在没有 imagine_filter()
的情况下效果很好。使用 Vich 资产时也会出现同样的效果。
检查图片链接路径时:
http://localhost:8000/media/cache/resolve/my_thumb/images/products/hqdefault.jpg
图片路径是
web/images/products
有谁知道可能是什么问题吗?
或者提供用于创建图像缩略图的替代包
所有的帮助都会很棒
FIXED:在 php.ini 中启用 GD 和 filenames 并重新启动 apache , 然后清除缓存修复一切