2010-12-27 17 views
3

私はDjangoのPIL(Python Image Library)に大きな問題があり、多くの問題を抱えており、問題の根本原因を突き止めることができませんでした。JPEGのDjango ImageField問題

この問題は、Django管理者のImageFieldを通してJPEG画像をアップロードできないことに本質的に壊れています。しかし、問題はlibjpegをインストールするほど簡単ではありません。

最初に、PIL(Buildoutを介して)をインストールして、JPEGサポートが利用できなかったため、libjpegをインストールしていないことを認識しました。

自分でサーバをセットアップしていないので、私はそれがインストールされていないと仮定し、ソースからlibjpeg 8をコンパイルしました。これは私の/usr/local/lib/ディレクトリにありました。私はBuildoutファイルをクリアし、すべてを再構築しました。今回はPILがコンパイルされたときにJPEGをサポートしていました。しかし、私はDjango管理者に行き、ImageFieldを使ってJPEGをアップロードしようとしました。 「有効な画像をアップロードしてください。あなたがアップロードしたファイルが画像でも破損した画像でもない」というエラーが表示されます。ちょうど私がDjanoシェルを開いて、以下を実行したテストとして:

> import Image 
> i = Image.open("/absolute_path/file.jpg") 
> print i 
<JpegImagePlugin.JpegImageFile image mode=RGB size=940x375 at 0x7F908C529BD8> 

これはエラーなしで実行され、PILがJPEGのを開くことができることを示しています。

いくつかの読み取りを行った後、私はこのスレッドに遭遇:PHPはまたのlibjpegを使用し、Djangoの前にロードされ、そしてそのためのロードが前に6.2のlibjpegのよう Is it possible to control which libraries apache uses?

が見えます。 lsofをを使用する場合は、showです:

COMMAND PID  USER FD TYPE DEVICE SIZE/OFF NODE NAME 
apache2 2561 www-data mem REG 202,1 146032 639276 /usr/lib/libjpeg.so.62.0.0 

だから私の考えは、私が6.2のlibjpeg使用しなければならないということです。そこで私は/usr/local/libディレクトリにあるlibjpegを削除しました。 PILのインストール手順を読み直した後、PILに必要なlibjpeg用のdev/headerファイルがないかもしれないことに気がつきました。だから私はまた、aptitudeアンインストーラ(sudo aptitude remove libjpeg62)を使ってlibjpegをアンインストールしました。次に、PILが必要なヘッダファイルがあることを確認するために、aptitudeを使用してlibjpegをインストールしました。(sudo aptget install libjpeg62-dev)。

ここから私は自分のBuildoutディレクトリを削除し、BuildRoutはPILを再インストールしました。もう一度、私はJPEGをサポートしています。現在、libjpeg62を使用しています。

私はDjango Adminでテストに行きます。 JPEGはまだサポートされていません。だから私は一般的にJPEGサポートをテストし、例外が処理されなかったかどうか、それがどんな種類のエラーを投げるかを見たいと思っていました。だから、私のホームページビューで、私はJPEGの画像を開くには、次のコードを追加しました:

import Image 
i = Image.open("/absolute_path/file.jpg") 
v = i.verify() 

その後、私はちょうど簡単に出力を確認するためにHTMLビューに私を渡します。これらの変更をサーバーに展開して再起動します。私は、エラーが表示され、次の出力を得ることがない驚いています:

{{ i }} - <JpegImagePlugin.JpegImageFile image mode=RGB size=940x375 at 0x7F908C529BD8> 
{{ v }} - None 

は、だから私は本当に混乱しています。この時点で:管理者がすることはできませんが

  1. はなぜ成功したJPEGを開くことができますか?
  2. 私は何かが欠けていますか?これはlibjpegの問題ではありませんか?
  3. libjpegに問題がなければ、どうして問題なくPNGをアップロードできますか?

何か助けていただければ幸いですが、私は2日間デバッグしています。適性を通じてインストール6.2のlibjpeg(ビルドアウトかかわらインストール) 1. Rackspaceのクラウドサーバ 2. Ubuntuの10.04 3.ジャンゴ1.2.3(ビルドアウトかかわらインストール) 4. PIL 1.1.7 5.(:

セットアップ私は、本当の問題は、ことになったのかわからないです。投稿後、私はこの5分を解決するだろうと、

答えて

5

囲碁フィギュア(sudoはaptgetです:libjpeg62-devのをインストールする)、それは私がそれを解決する方法である。

aptitudeでlibjpegをインストールして以来、私はPビルドアウトではなく適性を持つイリノイ州。私がやってしまった何を

た:

sudo apt-get install libjpeg62-dev 
sudo apt-get install python-imaging 

は、その後、私は私のビルドアウト、再構築された私のプロジェクトからPILを取り出して、それが働きました。 PILとlibjpegがAptitudeを介してインストールされたので、PILがlibjpegを見つけたという問題を解決したかのように見えます。