質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

881閲覧

python ソースコードのclass化

August.

総合スコア7

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/08/27 00:23

前提・実現したいこと

pythonで
このソースコードをclassで呼び出せるようにしたいのですが初心者すぎて調べてもよくわかりません。。。
呼び出すコードではなくこのソースコードを呼び出せるようにしたいです。
どなたか教えていただけると幸いです。

該当のソースコード

from PIL import Image
from io import BytesIO
import os

コンフィグ

COMPRESS_QUALITY = 90 # 圧縮のクオリティ

#画像ファイルを用意

png_imgfile = ""

#############################

PNG形式の圧縮処理

#############################

ファイル名を取得

file_name = os.path.splitext(os.path.basename(png_imgfile))[0]
with open(png_imgfile, 'rb') as inputfile:
# バイナリモードファイルをPILイメージで取得
im = Image.open(inputfile)
# JPEG形式に変換して、圧縮を実行
im = im.convert('RGB')
im_io = BytesIO()
im.save(im_io, 'JPEG', quality = COMPRESS_QUALITY)
with open('comp_' + file_name + '.jpg', mode='wb') as outputfile:
# 出力ファイル(comp_png_image.png)に書き込み
outputfile.write(im_io.getvalue())

ここにより詳細な情報を記載してください。
.pngファイルを.jpgに変換するコードです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2021/08/27 00:34

コードは「コードの挿入」で記入してください。 > 初心者すぎて調べてもよくわかりません。。。 調べたこと、試したことを質問に書いてください。 > 呼び出すコードではなくこのソースコードを呼び出せるようにしたいです。 関数にするだけで良いような気がします。pyファイルにして呼び出せば良いかと。その方法で調べてみてはどうでしょうか?
August.

2021/08/27 00:46

調べたこと classに関して調べたのですが、どこにclassをいれるのかがわかりません。 調べると呼び出すコードも一緒に出てくるため、どこまでやれば呼び出せる状態になるのかがわかりませんでした。 指示がclassで呼び出せるようにしてと言われているのでclassで調べている現状です。
quickquip

2021/08/27 00:50

"classで呼び出せるようにして"だけだと、どういう状態になっていたらいいのか? がわからないな、と率直に思います。 "初心者だから調べてもよくわからない"のではなくて、そもそもなにがゴールなのかが曖昧なだけかと。
August.

2021/08/27 01:00

上記のコードをclass化してメインのコードでいつでも呼び出せるようにしてくれと言われています。 なるほど、、、
quickquip

2021/08/27 01:07 編集

> class化してメインのコードでいつでも呼び出せるようにしてくれ "class化して"は言葉の綾でしかなくて、classである必要があると思って言っているわけじゃないのでは……? と感じます。 本当にclassにしてほしいのだとしたら、その理由がなにかは(私には)ぜんぜん想像できないので、その人が望む状態にするには情報が足りないと感じます。
quickquip

2021/08/27 01:08

その人もclassがなにかわからずに適当に言っているのでは……? というところから疑いたくなります。
guest

回答2

0

ベストアンサー

quickquipさんが書かれているとおり、何のためにクラスにしたいのかは不明です。
そこを指示者に質問するのが正しいのですが、人間関係の問題で質問できないこともあるかもしれません。

そういう場合は、なにかしらの形でクラスにして渡す必要があります。
以下のような形ならいいのではないでしょうか。

クラスの定義

python

1class Png2Jpeg: 2 def __init__(self, png_imgfile, COMPRESS_QUALITY=90): 3 必要な処理 4 def save(self, jpeg_imgfile=None, output_directory='./',header='comp_'): 5 必要な処理

なお、必要な処理は御自分で作ってください。

呼び出し方

python

1p2g = Png2Jpeg('./png/foo.png') 2png.save()

これで、カレントディレクトリの下のディレクトリpngの下にあるfoo.pngをjpeg形式に変換してカレントディレクトリにcomp_foo.jpgで保存します。

これぐらいのものを渡せば相手は満足するでしょう。

投稿2021/08/27 01:41

ppaul

総合スコア24668

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

August.

2021/08/27 01:47

細かくありがとうございます。参考になります。
guest

0

クラスを作りたいのであれば、少なくとも設計する必要があります。
関数をクラスにしたいというだけではできません。

基本的には、クラスは「値」と「メソッド」を持ちます。どのような物を持っているか、それを使ってどのように処理をするかということです。

たとえば、ドル円換算オブジェクトのクラスを作るとしたら、

  • 「変換レート」を持つ。 生成時に与える
  • 円をドルに変換するメソッドを持つ
  • ドルを円に変換するメソッドを持つ
  • 変換レートを設定しなおすメソッドを持つ

という感じに考えて、メソッドの処理の内容を考えます。

こんな感じに考えて実装してみてください。

投稿2021/08/27 01:09

TakaiY

総合スコア13687

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

August.

2021/08/27 01:46

なるほど、、、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問