Project

General

Profile

Enhancement(機能追加・改善) #3139

300kのアップロード制限の廃止

Added by pnetan   almost 8 years ago. Updated 4 months ago.

Status:
New(新規)
Priority:
Normal(通常)
Assignee:
-
Target version:
Start date:
2012-07-30
Due date:
% Done:

0%


Description

http://sns.openpne.jp/diary/27757 より転記

日記本文

最近のスマホにしても携帯にしてもデジカメにしても、画素数がおおく300k以下に収まることがない。そのため、参加者側でファイルサイズを小さくする手間が必要になり、他のSNSと比べても利便性を落としてしまっている。
そのため、サーバ側でjpegデータを受け取ったあとにimagickで画像を最適化することで大幅なファイルサイズの軽減を行う。

修正) lib/model/doctrine/File.class.php

public function isImage()
{
$type = $this->getType();
if ($type === 'image/jpeg')
// || $type === 'image/gif'
// || $type === 'image/png')
{
return true;
}

gif, pngをあえてアップロード不可にする。

修正) lib/model/doctrine/File.class.php

public function save(Doctrine_Connection $conn = null)
{
$this->setFilesize(strlen($this->FileBin->bin));

if ($this->isImage())
{
$class = sfImageHandler::getStorageClassName();
$this->setName(call_user_func(array($class, 'getFilenameToSave'), $this->getName()), $class);

$storage = call_user_func(array($class, 'create'), $this, $class);

$image = new Imagick;
$image->readImageBlob($this->FileBin->bin);
if($image->getImageWidth() > 1024 || $image->getImageHeight() > 768)
{
$image->scaleImage(1024,768,True);
$image->setCompressionQuality(80);
}
$this->FileBin->bin = $image;

$storage->saveBinary($this->getFileBin());
}

画像データを受け取った後、それがイメージファイルであれば 1024x768 ベストフィットリサイズを行わせてからDBに入れるという形。
そのため、予めphp.iniにアップロード制限を撤廃しておき、またSNSでもファイルサイズ制限を撤廃しておく。

この修正を入れると png , gif を画像とみなさないため、一部の参加者のアイコン画像やその他日記等で使われているとすべて表示されなくなる。当SNSでは90%以上jpegなのでこの修正で踏み切ったが、png,gif画像を排除しない場合はもう少し一工夫が必要かと思う。

History

#1 Updated by kaoru n 4 months ago

  • Target version set to OpenPNE 3.10.x

Also available in: Atom PDF